悼念512汶川大地震遇难同胞——珍惜现在,感恩生活(HDU-2191)
Problem 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
思路:n 元 m 種米,每種米的價格是 p[i],重量是 h[i],袋數是 c[i]
多重背包,其中 n 元代表背包容量,m 代表物品種類數,價格 p[i] 代表第 i 種物品重量,重量 h[i] 代表物品價值,袋數 c[i] 代表物品數量
那么問題就轉為:在背包容量為 n 的情況下,有 m 種物品,每種物品的重量是?p[i],價值是 h[i],個數是 c[i],求最大價值
Source Program
#include<iostream> #include<cstdio> #include<cstdlib> #include<string> #include<cstring> #include<cmath> #include<ctime> #include<algorithm> #include<utility> #include<stack> #include<queue> #include<vector> #include<set> #include<map> #define PI acos(-1.0) #define E 1e-9 #define INF 0x3f3f3f3f #define LL long long const int MOD=10007; const int N=2000+5; const int dx[]= {-1,1,0,0}; const int dy[]= {0,0,-1,1}; using namespace std; int n,m; int p[N],h[N],c[N]; int f[N]; void MultiplePack(int cost,int weight,int num){for(int j=n;j>=0;j--)for(int k=0;k<=num;k++)if(j-k*weight>=0)f[j]=max(f[j],f[j-k*weight]+k*cost); } int main(){int t;cin>>t;while(t--){memset(f,0,sizeof(f));cin>>n>>m;for(int i=1;i<=m;i++)cin>>p[i]>>h[i]>>c[i];for(int i=1;i<=m;i++)MultiplePack(h[i],p[i],c[i]);cout<<f[n]<<endl;}return 0; }?
總結
以上是生活随笔為你收集整理的悼念512汶川大地震遇难同胞——珍惜现在,感恩生活(HDU-2191)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 信息学奥赛一本通(1022:整型与布尔型
- 下一篇: 棋盘游戏(信息学奥赛一本通-T1451)