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直接无穷大。
}
return 0;
}
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;
}
