文章
166
粉丝
68
获赞
1000
访问
142.3k
 
#include <bits/stdc++.h>
using namespace std;
int main() {
	int n;
	while(cin>>n){
	    vector<int>dp(n+1,INT_MAX);
	    dp[0]=0;
	    int m;cin>>m;
	    for(int i=0;i<m;i++){
	        int x;cin>>x;
	        for(int j=x;j<=n;j++){
	            if(dp[j-x]!=INT_MAX){
	                dp[j]=min(dp[j],dp[j-x]+1);
	            }
	        }
	    }
	    if(dp[n]==INT_MAX)cout<<"Impossible"<<endl;
	    else cout<<dp[n]<<endl;
	}
}
这里是经典的一维完全背包问题的解法,核心是判断条件,如果是单纯的匹配值问题,这里直接用bool类型数组即可,因为需要数量,所以我们在可以匹配的时候,计算数量的最小值即可。
登录后发布评论
暂无评论,来抢沙发