【SSL】购买干草

   日期:2020-08-20     浏览:99    评论:0    
核心提示:购买干草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 Input2 15

购买干草

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

解题思路

这道题也是使用完全背包的方法,只不过要赋初值,还要判断最小值。
状态转移方程:
f o r ( i n t j = a [ i ] ; j < = m + 5000 ; j + + ) for(int j=a[i];j<=m+5000;j++) for(intj=a[i];j<=m+5000;j++)
f [ j ] = m i n ( f [ j ] , f [ j − a [ i ] ] + b [ i ] ) ; f[j]=min(f[j],f[j-a[i]]+b[i]); f[j]=min(f[j],f[ja[i]]+b[i]);

#include<iostream>
#include<iomanip>
#include<cmath>
#include<algorithm>
#include<cstring>
#include<cstdio>
using namespace std;
int ans=2100000000,n,m,a[55010],b[55010],f[55010];
int main()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	 cin>>a[i]>>b[i];
	for(int i=1;i<=m+5000;i++)//到m+5000,就可以保证f数组里有最小的结果
	 f[i]=2100000000;//赋初值,为了后面判断最小值
	for(int i=1;i<=n;i++)
	{
		for(int j=a[i];j<=m+5000;j++)
		 f[j]=min(f[j],f[j-a[i]]+b[i]);//状态转移方程
	}
	for(int i=m;i<=m+5000;i++)
	 ans=min(ans,f[i]);//求最小值
	cout<<ans;
	return 0;
}

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服