完全背包变体
2026-05-16 14:18:31
发布于:广东
4阅读
0回复
0点赞
先用第一个量覆盖整个数组再min
#include<bits/stdc++.h>
using namespace std;
int dp[1000005];
int m,n,w[1000005],v[1000005];
int main(){
cin>>n>>m;
m-=n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>v[i]>>w[i];
}
for(int j=w[1];j<=m;j++){
dp[j]=max(dp[j],dp[j-w[1]]+v[1]);
}//覆盖
for(int i=2;i<=n;i++){//注意i=2
for(int j=w[i];j<=m;j++){
dp[j]=min(dp[j],dp[j-w[i]]+v[i]);
}
}//正常完全背包模板
if(dp[m]==0){
cout<<"This is impossible.";
}
else{
cout<<"The minimum amount of money in the piggy-bank is "<<dp[m]<<".";
}
return 0;
}
这里空空如也







有帮助,赞一个