题意:已知空钱罐质量和满钱罐质量(也就是知道钱罐里的钱的质量),知道若干种钱币每种的质量以及其价值,钱币都是无限个,问最少钱罐中有多少钱。
这个题在集训的时候学长给我们做过,所以你会做是应该的,由于已经有固定的质量,所以是必须正好放满的完全背包问题。然后```具体过程就不细讲了完全背包依旧是经典,你要是还不会就滚回去看背包九讲并且无颜见学长们了```
1 #include<stdio.h> 2 #include<string.h> 3 #define min(a,b) a<b?a:b 4 int p[502],w[502],dp[10010]; 5 6 int main(){ 7 int T; 8 while(scanf("%d",&T)!=EOF){ 9 for(int q=1;q<=T;q++){ 10 memset(dp,-1,sizeof(dp)); 11 int E,F,N; 12 dp[0]=0; 13 scanf("%d%d%d",&E,&F,&N); 14 int i,j,k,w0=F-E; 15 for(i=1;i<=N;i++){ 16 scanf("%d%d",&p[i],&w[i]); 17 for(j=w[i];j<=w0;j++){ 18 if(dp[j-w[i]]>=0){ 19 if(dp[j]>=0){ 20 dp[j]=min(dp[j],dp[j-w[i]]+p[i]); 21 } 22 else dp[j]=dp[j-w[i]]+p[i]; 23 } 24 } 25 } 26 if(dp[w0]==-1)printf("This is impossible.\n"); 27 else printf("The minimum amount of money in the piggy-bank is %d.\n",dp[w0]); 28 } 29 } 30 return 0; 31 }
时间: 2024-10-06 09:41:02