HDU - 2191 珍惜現在,感恩生活(多重揹包板題)
Description
現在假設你一共有資金n元,而市場有m種大米,每種大米都是袋裝產品,其價格不等,並且只能整袋購買。
請問:你用有限的資金最多能採購多少公斤糧食呢?
Input
輸入資料首先包含一個正整數C,表示有C組測試用例,每組測試用例的第一行是兩個整數n和m(1<=n<=100, 1<=m<=100),分別表示經費的金額和大米的種類,然後是m行資料,每行包含3個數p,h和c(1<=p<=20,1<=h<=200,1<=c<=20),分別表示每袋的價格、每袋的重量以及對應種類大米的袋數。
Output
對於每組測試資料,請輸出能夠購買大米的最多重量,你可以假設經費買不光所有的大米,並且經費你可以不用完。每個例項的輸出佔一行。
Sample Input
1
8 2
2 100 4
4 100 2
Sample Output
400
Solution
多重揹包板題,包含了01揹包、完全揹包。注意:
- dp[]的初始化
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
const int maxn = 111, INF = 0x3f3f3f3f;
int dp[maxn];
int total_cost, total_kind;
struct Rice
{
int weight, cost, num;
};
Rice arr[maxn];
void zero_pack(int cost, int weight)
{
for (int i = total_cost; i - cost >= 0; i--)
dp[i] = max(dp[i], dp[i - cost] + weight);
}
void complete_pack(int cost, int weight)
{
for (int i = cost; i <= total_cost; i++)
dp[i] = max(dp[i], dp[i - cost] + weight);
}
void multiple_pack(int cost, int weight, int num)
{
//如果大於等於金額,就按完全揹包處理(此時相當於不限定袋數)
if (cost * num >= total_cost)
{
complete_pack(cost, weight);
return;
}
//打包成1 2 4 8 ...份
int k = 1;
while (k < num)
{
zero_pack(k * cost, k * weight);
num -= k;
k << 1;
}
//處理剩下的物品
zero_pack(num * cost, num * weight);
}
int main()
{
// freopen("in.txt", "r", stdin);
int T;
scanf("%d", &T);
while (T--)
{
scanf("%d%d", &total_cost, &total_kind);
for (int i = 1; i <= total_kind; i++)
scanf("%d%d%d", &arr[i].cost, &arr[i].weight, &arr[i].num);
// 多重揹包
memset(dp, 0, sizeof(dp));
dp[0] = 0;
for (int i = 1; i <= total_kind; i++)
multiple_pack(arr[i].cost, arr[i].weight, arr[i].num);
printf("%d\n", dp[total_cost]);
}
return 0;
}
相關文章
- Hdu2191珍惜現在,感恩生活(多重揹包,模板)
- hdu3591The trouble of Xiaoqian 多重揹包+全然揹包
- HDU - 1114 Piggy-Bank(完全揹包板題)
- 005多重揹包問題||
- 01揹包、完全揹包、多重揹包詳解
- 深入剖析多重揹包問題(上篇)
- 深入剖析多重揹包問題(下篇)
- javascript演算法基礎之01揹包,完全揹包,多重揹包實現JavaScript演算法
- HDU Piggy-Bank(完全揹包問題)
- 簡單的揹包問題(入門)HDU2602 HDU2546 HDU1864
- 多重揹包問題的單調佇列優化佇列優化
- 【BZOJ 5003】與鏈 (多重揹包 dp)
- 揹包問題(01揹包與完全揹包)
- OpenJ_Bailian - 2773 採藥(01揹包板題)AI
- 小時候總是不懂珍惜和感恩
- 揹包問題
- 01揹包和完全揹包問題解法模板
- 多重揹包動態規劃及空間優化動態規劃優化
- 01揹包問題
- 01 揹包問題
- hdu6007 Mr. Panda and Crystal (最短路+完全揹包)
- 揹包DP——完全揹包
- 揹包DP——混合揹包
- 揹包題型總結
- 揹包問題大合集
- 經典揹包問題
- 部分揹包問題(挖
- 揹包九講問題
- 從【零錢兌換】問題看01揹包和完全揹包問題
- 揹包問題例題總結
- 分組揹包、完全揹包
- 【模板】01揹包、完全揹包
- 51nod 1597 有限揹包計數問題 (揹包 分塊)
- 2. 01揹包問題
- 【leetcode】揹包問題彙總LeetCode
- 程式碼隨想錄演算法訓練營第四十六天| 139.單詞拆分 多重揹包 揹包問題總結篇!演算法
- 揹包問題解題方法總結
- JavaScript中揹包問題(面試題)JavaScript面試題