您的位置:首页 > 其它

HDU 1114 Piggy-Bank(完全背包)

2013-08-24 21:39 405 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1114

题目大意:根据储钱罐的重量,求出里面钱最少有多少。给定储钱罐的初始重量,装硬币后重量,和每个对应面值硬币的重量。

[align=left]Sample Input[/align]

3
10 110
2
1 1
30 50
10 110
2
1 1
50 30
1 6
2
10 3
20 4

[align=left]Sample Output[/align]

The minimum amount of money in the piggy-bank is 60.
The minimum amount of money in the piggy-bank is 100.
This is impossible.

分析:这道题目的动态规划思想很简单,就是背包。
  
代码如下:

# include<stdio.h>
# include<string.h>
const int N = 501;
const int INF = 0xffffff;
int f[10001];    //f[i]表示总重量为i的硬币,价值为多少
int p
,w
;
int main()
{
int T;
scanf("%d",&T);
while (T--){
int n,a,b,i,j;
scanf("%d%d",&a,&b);
f[0] = 0;    //表示重量为0的硬币价值为0
for (i=1;i<=b;i++) f[i]=INF;
scanf("%d",&n);
for (i=1;i<=n;i++) scanf("%d%d",&p[i],&w[i]);
for (i=1;i<=n;i++){
for (j=w[i];j<=b-a;j++){
if (f[j-w[i]]+p[i]<f[j]) f[j]=f[j-w[i]]+p[i];
}
}
if (f[b-a]==INF) printf("This is impossible.\n");
else printf("The minimum amount of money in the piggy-bank is %d.\n",f[b-a]);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: