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

描述


http://www.lydsy.com/JudgeOnline/problem.php?id=1618

有n种物品,每种物品有价值和重量,可以无限拿.现在要满足价值之和大于等于h,问最小重量.

 

分析


完全背包,模板是给定重量求价值最大,这道题是给定价值求重量最小.其实差不多的.

p.s.大概我只能做出来这种水题了.

 

 

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 
 4 const int N=100+5,W=50000+5,INF=0x3fffffff;
 5 int n,h;
 6 int dp[W],w[N],v[N];
 7 inline void read(int &ret){
 8     ret=0; int k=1; char c;
 9     for(c=getchar();c<'0'||c>'9';c=getchar())if(c=='-') k=-1;
10     for(;c>='0'&&c<='9';c=getchar()) ret=ret*10+c-'0';
11     ret*=k;
12 }
13 int main(){
14     read(n); read(h);
15     for(int i=1;i<=n;i++) read(v[i]), read(w[i]);
16     for(int i=1;i<=h;i++) dp[i]=INF;
17     for(int i=1;i<=n;i++)for(int j=1;j<=h;j++){
18         if(v[i]>=j) dp[j]=min(dp[j],w[i]);
19         else dp[j]=min(dp[j],dp[j-v[i]]+w[i]);
20     }
21     printf("%d\n",dp[h]);
22     return 0;
23 }
View Code

 

 

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

Time Limit: 5 Sec  Memory Limit: 64 MB
Submit: 950  Solved: 488
[Submit][Status][Discuss]

Description

    约翰的干草库存已经告罄,他打算为奶牛们采购日(1≤日≤50000)磅干草.
    他知道N(1≤N≤100)个干草公司,现在用1到N给它们编号. 第i个公司卖的干草包重量为Pi(1≤Pi≤5000)磅,需要的开销为Ci(l≤Ci≤5000)美元.每个干草公司的货源都十分充足,可以卖出无限多 的干草包.    帮助约翰找到最小的开销来满足需要,即采购到至少H磅干草.

Input

    第1行输入N和日,之后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

 

posted @ 2016-06-01 18:03  晴歌。  阅读(342)  评论(0编辑  收藏  举报