Piggy-Bank 完全背包(是否装满!!)

#include<bits/stdc++.h>
using namespace std;

const int Max=500+10;
const int INF=INT_MAX/10;
int w[Max];
int v[Max];
int dp[Max];

int main() {
int caseN;
cin>>caseN;
while(caseN--) {
int e,f;
cin>>e>>f;
int n;
cin>>n;
for(int i=1; i<=n; i++) {
cin>>v[i]>>w[i];
}
int l=f-e;
for(int i=1; i<=l; i++) {
dp[i]=INF;                                     //表明dp数组目前未被定义
}
dp[0]=0;
for(int i=1; i<=n; i++) {
for(int j=w[i]; j<=l; j++) {
dp[j]=min(dp[j],dp[j-w[i]]+v[i]);                      //取最小值,如果空间不够,dp直接无穷大。
}
}
if(dp[l]==INF){                                                    //dp数组没有被初始化,说明剩余空间不够再装了。
cout<<"This is impossible"<<endl;
}
else{
cout<<dp[l]<<endl;                                             //最大容量有值,说明其最后正好有空间完成dp数组的初始化,被装满。
}
}
return 0;
}
全部评论
楼主厉害啊
点赞 回复 分享
发布于 2022-10-18 15:11 山西

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务