HDU - 1114 Piggy-Bank(完全揹包板題)
Description
小盆友通過往豬豬存錢罐裡放錢的方式攢錢做事。存錢罐除非砸壞,否則無法把錢取出。為了知道是否攢了足夠的錢,對存錢罐稱重。然後告訴每種錢幣的重量和價值,問存錢罐裡最少可能有多少錢。
Sample Input
3
10 110
2
1 1
30 50
10 110
2
1 1
50 30
1 6
2
10 3
20 4
Sample Output
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.
Solution
完全揹包板題。注意恰好裝滿時候dp初始化為無窮,可以不恰好裝滿時dp初始化為0。
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
const int maxn = 11111, INF = 0x3f3f3f3f;
int dp[maxn];
int total_cost, total_kind;
struct Obj
{
int value, cost;
};
Obj arr[maxn];
void complete_pack()
{
for (int i = 1; i <= total_kind; i++)
for (int j = arr[i].cost; j <= total_cost; j++)
dp[j] = min(dp[j], dp[j - arr[i].cost] + arr[i].value);
if (dp[total_cost] != INF)
printf("The minimum amount of money in the piggy-bank is %d.\n", dp[total_cost]);
else
printf("This is impossible.\n");
}
int main()
{
// freopen("in.txt", "r", stdin);
int T;
scanf("%d", &T);
while (T--)
{
int E, F;
scanf("%d%d", &E, &F);
total_cost = F - E;
scanf("%d", &total_kind);
for (int i = 1; i <= total_kind; i++)
scanf("%d%d", &arr[i].value, &arr[i].cost);
memset(dp, 0x3f, sizeof(dp));
dp[0] = 0;
complete_pack();
}
return 0;
}
相關文章
- HDU Piggy-Bank(完全揹包問題)
- 揹包問題(01揹包與完全揹包)
- HDU - 2191 珍惜現在,感恩生活(多重揹包板題)
- 揹包DP——完全揹包
- 01揹包和完全揹包問題解法模板
- 分組揹包、完全揹包
- 【模板】01揹包、完全揹包
- hdu6007 Mr. Panda and Crystal (最短路+完全揹包)
- 01揹包、完全揹包、多重揹包詳解
- hdu3591The trouble of Xiaoqian 多重揹包+全然揹包
- 從【零錢兌換】問題看01揹包和完全揹包問題
- dp-完全揹包
- Codeup 貨幣系統(完全揹包問題)
- 簡單的揹包問題(入門)HDU2602 HDU2546 HDU1864
- javascript演算法基礎之01揹包,完全揹包,多重揹包實現JavaScript演算法
- OpenJ_Bailian - 2773 採藥(01揹包板題)AI
- 【程式碼隨想錄】完全揹包
- 圖解二維完全揹包問題——降維打擊圖解
- 揹包問題
- 演算法-動態規劃-完全揹包演算法動態規劃
- PIPIOJ 1079: PIPI的存錢罐 完全揹包
- 01揹包問題
- 01 揹包問題
- Hdu2191珍惜現在,感恩生活(多重揹包,模板)
- CHOJ 5202 自然數拆分Lunatic版 【完全揹包模型】模型
- 揹包DP——混合揹包
- 揹包題型總結
- 揹包問題大合集
- 經典揹包問題
- 005多重揹包問題||
- 部分揹包問題(挖
- 揹包九講問題
- 揹包問題例題總結
- 51nod 1597 有限揹包計數問題 (揹包 分塊)
- 2. 01揹包問題
- 【leetcode】揹包問題彙總LeetCode
- 藍橋杯 演算法提高 拿糖果(完全揹包dp)演算法
- 揹包問題解題方法總結