您的位置:首页 > 其它

HDU 1114 Piggy-Bank 【求最小值的完全背包】

2018-03-10 19:48 369 查看
传送门

// 题意: 给定一个存钱罐的空体积和装满前的体积, 给定n种硬币的价值以及体积, 问能否刚好把存钱罐装满, 并且装满后的存钱罐最少的钱是多少, 其中n种硬币可以用任意次.

思路: 任意次就是完全背包, 然后要恰好装满, 那么dp初始或还是为inf(因为这求的是最小值), dp[0] = 0, 然后max 改成 min 即可…….

AC Code

const int maxn = 5e2+5;
int v[maxn], w[maxn];
int dp[10005];
void solve()
{
int st, ed, tot, n;
cin >> st >> ed;
cin >> n; tot = ed - st;
for (int i = 1 ; i <= n ; i ++) {
cin >> w[i] >> v[i];
}
Fill(dp, inf); dp[0] = 0;
for (int i = 1 ; i <= n ; i ++) {
for (int j = v[i] ; j <= tot ; j ++) {
dp[j] = min(dp[j], dp[j-v[i]] + w[i]);
}
}
if (dp[tot] < inf) {
printf("The minimum amount of money in the piggy-bank is %d.\n", dp[tot]);
}
else printf("This is impossible.\n");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: