題意:給出儲錢罐初始的重量,放入錢後的重量。給出N種貨幣,貨幣的價值和重量。問儲錢罐中錢的最少的價值是多少。
思路:因爲錢的數量可以認爲是無限的,所以是個完全揹包。
注意:注意初始化。
代碼如下:
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
const int MAX = 50000;
int dp[MAX],w[MAX],v[MAX];
int main(void)
{
//freopen("input.txt","r",stdin);
int T,E,F,N;
scanf("%d",&T);
while(T--){
scanf("%d%d%d",&E,&F,&N);
F -= E;
for(int i = 0; i < N; ++i)
scanf("%d%d",&v[i],&w[i]);
memset(dp,0x3f,sizeof(dp));
dp[0] = 0;
for(int i = 0; i < N; ++i)
for(int j = w[i]; j <= F; ++j)
dp[j] = min(dp[j],dp[j-w[i]]+v[i]);
if(dp[F] == 0x3f3f3f3f)
puts("This is impossible.");
else
printf("The minimum amount of money in the piggy-bank is %d.\n",dp[F]);
}
return 0;
}