这道题想读懂题意真难。。。 给出的输入样例也容易混淆,不过我已经将每组数据之间用空格隔开啦。。。完全背包的模板。。。
题意:先输入一个数T代表测试数据的个数。每组测试数据第一行两个数E,F分别代表存钱罐空着和装满状态时的质量,第二行一个整数N代表存钱罐所装的硬币的种类个数,接下来的N行,每行有两个数,
硬币的价值
P,硬币的
质量
W。要求你求出当存钱罐装满时,里面所装的硬币的价值最少是多少?
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
#define INF 0x3f3f3f
int dp[10010];
int main(){
int E,F,P,W,t,n,i,j;
scanf("%d",&t);
while(t--){
scanf("%d%d",&E,&F);
scanf("%d",&n);
for(i=1;i<=F-E;i++)
dp[i]=INF;
dp[0]=0;
while(n--){
scanf("%d%d",&P,&W);
for(i=W;i<=F-E;i++)
dp[i]=min(dp[i],dp[i-W]+P);
}
if(dp[F-E]==INF)
printf("This is impossible.\n");
else
printf("The minimum amount of money in the piggy-bank is %d.\n",dp[F-E]);
}
return 0;
}