[BZOJ] 1618: [Usaco2008 Nov]Buying Hay 购买干草

Posted Lev今天学习了吗

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[BZOJ] 1618: [Usaco2008 Nov]Buying Hay 购买干草相关的知识,希望对你有一定的参考价值。

1618: [Usaco2008 Nov]Buying Hay 购买干草

Time Limit: 5 Sec  Memory Limit: 64 MB
Submit: 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

Sample Output

9
FJ can buy three packages from the second supplier for a total cost of 9.

HINT

 

Source

Silver

 

Analysis

笑死,自从遇见贪心,什么都想贪心=w=

主要解法:完全背包DP

 

Code

技术分享
 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 }
发现自己的贪心策略出错=w=此处完全背包

 

以上是关于[BZOJ] 1618: [Usaco2008 Nov]Buying Hay 购买干草的主要内容,如果未能解决你的问题,请参考以下文章

[bzoj1618][Usaco2008 Nov]购买干草

BZOJ1618: [Usaco2008 Nov]Buying Hay 购买干草

BZOJ_1618_ [Usaco2008_Nov]_Buying_Hay_购买干草(动态规划,完全背包)

bzoj1618: [Usaco2008 Nov]Buying Hay 购买干草 完全背包

BZOJ 1618: [Usaco2008 Nov]Buying Hay

[BZOJ1602][Usaco2008 Oct]牧场行走