记录编号 320602 评测结果 AAAAAAAAAA
题目名称 [NOIP 2010冲刺六]软件开发 最终得分 100
用户昵称 Gravatarjmisnal 是否通过 通过
代码语言 C++ 运行时间 0.102 s
提交时间 2016-10-12 12:53:50 内存使用 0.21 MiB
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int n,m;
int a[105],b[105];
int f[105][105];//f[i][j]表示前i个人做j个A后还能做最多的B 
int text(int x)
{
//	cout<<x<<endl;
	memset(f,-1,sizeof(f));
	f[0][0]=0;
	for(int i=1;i<=n;i++)
	{
		for(int j=0;j<=m;j++)
		{
			for(int k=0;k<=j;k++)//第i个人可以选择做这么多个 
			{
			//	cout<<i<<' '<<j<<' '<<k<<endl;
				if(x<a[i]*k)continue;
				int B=(x-a[i]*k)/b[i];//做k个剩余的时间可以做B个b。 
				if(f[i-1][j-k]!=-1)
				{
					f[i][j]=max(f[i][j],f[i-1][j-k]+ B );
				}
			}
		}
	}
	return f[n][m];
}
int main()
{
	freopen("time.in","r",stdin);
	freopen("time.out","w",stdout);
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++)
		scanf("%d%d",&a[i],&b[i]);
	int l=1,r=1000000;
	while(r-l>1)
	{
		int mid=(l+r)>>1;
	//	cout<<l<<' '<<r<<' '<<mid<<endl; 
		if(text(mid)>=m)
			r=mid;
		else l=mid;
	}
	if(text(r))
		printf("%d\n",r);
	else printf("%d\n",l);
//	cout<<text(18);
	return 0;
}