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