购买干草
题目
约翰的干草库存已经告罄,他打算为奶牛们采购H(1≤H≤50000)磅干草,他知道N(1≤N≤100)个干草公司,现在用1到N给它们编号。第i个公司卖的干草包重量为Pi(1≤Pi≤5000)磅,需要的开销为Ci(l≤Ci≤5000)美元.每个干草公司的货源都十分充足,可以卖出无限多的干草包.帮助约翰找到最小的开销来满足需要,即采购到至少H磅干草.
输入
第1行输入N和H,之后N行每行输入一个Pi和Ci.
输出
最小的开销。
Sample Input
2 15
3 2
5 3
Sample Output
9
解析
完全背包……
需要注意的是要额外留出5000的位置给可能溢出的干草
上代码:
#include<iostream>
#include<cstdio>
using namespace std;
const int maxn=2147483646,maxm=55001;
int n,m,a[maxm],b[maxm],c[maxm],t=maxn;
int main()
{
cin>>n>>m;
for(int i=1;i<=m+5000;i++)c[i]=maxn;
for(int i=1;i<=n;i++)cin>>a[i]>>b[i];
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m+5000;j++)c[j]=min(c[j],c[j-a[i]]+b[i]);
}
for(int i=m;i<=m+5000;i++)t=min(t,c[i]);
cout<<t;
return 0;
}