[BZOJ] 1618: [Usaco2008 Nov]Buying Hay 购买干草
1618: [Usaco2008 Nov]Buying Hay 购买干草
Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 1216 Solved: 633
[Submit][Status][Discuss]
Description
约翰的干草库存已经告罄,他打算为奶牛们采购H(1≤H≤50000)磅干草,他知道N(1≤N≤100)个干草公司,现在用1到
N给它们编号。第i个公司卖的干草包重量为Pi(1≤Pi≤5000)磅,需要的开销为Ci(l≤Ci≤5000)美元.每个干草公
司的货源都十分充足,可以卖出无限多的干草包. 帮助约翰找到最小的开销来满足需要,即采购到至少H磅干草
.
Input
第1行输入N和H,之后N行每行输入一个Pi和Ci.
Output
最小的开销.
Sample Input
2 15
3 2
5 3
3 2
5 3
Sample Output
9
FJ can buy three packages from the second supplier for a total cost of 9.
FJ can buy three packages from the second supplier for a total cost of 9.
HINT
Source
Analysis
笑死,自从遇见贪心,什么都想贪心=w=
主要解法:完全背包DP
Code
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include<cstdio> 2 #include<iostream> 3 #define maxn 1000000 4 using namespace std; 5 6 int DP[maxn],n,h,w[maxn],v[maxn],inf = 0x3f3f3f3f; 7 8 int main(){ 9 scanf("%d%d",&n,&h); 10 11 for(int i = 1;i <= n;i++){ 12 scanf("%d%d",&v[i],&w[i]); 13 } 14 15 for(int i = 1;i <= h;i++){ 16 DP[i] = inf; 17 } 18 19 for(int i = 1;i <= n;i++){ 20 for(int j = 1;j <= h;j++){ 21 if(v[i] >= j) DP[j] = min(DP[j],w[i]); 22 else DP[j] = min(DP[j],DP[j-v[i]]+w[i]); 23 } 24 } 25 26 printf("%d",DP[h]); 27 28 return 0; 29 }
转载请注明出处 -- 如有意见欢迎评论