hdu1114 dp(完全背包)

时间:2023-03-10 02:51:50
hdu1114 dp(完全背包)

题意:已知空钱罐质量和满钱罐质量(也就是知道钱罐里的钱的质量),知道若干种钱币每种的质量以及其价值,钱币都是无限个,问最少钱罐中有多少钱。

这个题在集训的时候学长给我们做过,所以你会做是应该的,由于已经有固定的质量,所以是必须正好放满的完全背包问题。然后```具体过程就不细讲了完全背包依旧是经典,你要是还不会就滚回去看背包九讲并且无颜见学长们了```

 #include<stdio.h>
#include<string.h>
#define min(a,b) a<b?a:b
int p[],w[],dp[]; int main(){
int T;
while(scanf("%d",&T)!=EOF){
for(int q=;q<=T;q++){
memset(dp,-,sizeof(dp));
int E,F,N;
dp[]=;
scanf("%d%d%d",&E,&F,&N);
int i,j,k,w0=F-E;
for(i=;i<=N;i++){
scanf("%d%d",&p[i],&w[i]);
for(j=w[i];j<=w0;j++){
if(dp[j-w[i]]>=){
if(dp[j]>=){
dp[j]=min(dp[j],dp[j-w[i]]+p[i]);
}
else dp[j]=dp[j-w[i]]+p[i];
}
}
}
if(dp[w0]==-)printf("This is impossible.\n");
else printf("The minimum amount of money in the piggy-bank is %d.\n",dp[w0]);
}
}
return ;
}