文章
166
粉丝
68
获赞
829
访问
51.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类型数组即可,因为需要数量,所以我们在可以匹配的时候,计算数量的最小值即可。
登录后发布评论
暂无评论,来抢沙发