HDU 1114

来源:互联网 发布:青岛网络 电视台 编辑:程序博客网 时间:2024/05/16 06:03

题目大意:存钱罐重t1克,加上钱币以后t2克。有m种硬币,输入每种硬币的价值以及硬币的重量,求存钱罐最少有多少钱。

解题思路:完全背包,且要正好装满,初始化为无穷大,除了dp[0],dp大小为体积最大的情况。

ac代码:

#include <iostream>#include <algorithm>#define INF 0x3f3f3f3fusing namespace std;int n, m, t1, t2, V, value[505], weight[505], dp[10005];int main(){scanf("%d", &n);while (n--){scanf("%d%d%d", &t1, &t2, &m);V = t2 - t1;for (int i=0; i<m; i++)scanf("%d%d", &value[i], &weight[i]);for (int i=0; i<=V; i++)dp[i] = INF;dp[0] = 0;for (int i=0; i<m; i++)for (int j=weight[i]; j<=V; j++)dp[j] = min(dp[j], dp[j-weight[i]]+value[i]);if (dp[V] < INF)printf("The minimum amount of money in the piggy-bank is %d.\n", dp[V]);elseprintf("This is impossible.\n");}return 0;}
原创粉丝点击