BZOJ_1618_ [Usaco2008_Nov]_Buying_Hay_购买干草(动态规划,完全背包)
Posted 晴歌。
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 }
1618: [Usaco2008 Nov]Buying Hay 购买干草
Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 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
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
以上是关于BZOJ_1618_ [Usaco2008_Nov]_Buying_Hay_购买干草(动态规划,完全背包)的主要内容,如果未能解决你的问题,请参考以下文章
BZOJ_1619_[Usaco2008_Nov]_Guarding_the_Farm_保卫牧场_(模拟+bfs)
[BZOJ] 1618: [Usaco2008 Nov]Buying Hay 购买干草
bzoj1618: [Usaco2008 Nov]Buying Hay 购买干草 完全背包