比赛 EYOI与SBOI开学欢乐赛14th 评测结果 AAAAAAAAAA
题目名称 ZQC 的拼图 最终得分 100
用户昵称 op_组撒头屯 运行时间 0.186 s
代码语言 C++ 内存使用 5.20 MiB
提交时间 2022-10-24 20:54:48
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
const int N=100+5;
const int inf=0x7fffffff;
int n,m;
int a[N],b[N],mx=inf;
int f[N][N];
bool check(int k){
	memset(f,0,sizeof(f));
	int mxy=0;
	for (int i=1,tmp=0;i<=n;i++){
		for (int j=0;j<=mxy;j++){
			for (int p=j;p<=min(m,j+k/a[i]);p++){
				f[i][p]=max(f[i][p],(a[i]*j+k-a[i]*p)/b[i]+f[i-1][j]);
				tmp=max(tmp,p);
			}
		}
		mxy=tmp;
	}
	return f[n][m]>=m;
}
int main(){
	freopen ("jigsaw.in","r",stdin);
	freopen ("jigsaw.out","w",stdout);
	scanf("%d%d",&n,&m);
	for (int i=1;i<=n;i++){
		scanf("%d%d",&a[i],&b[i]);
		mx=min(mx,(a[i]+b[i])*m+1);
	}
	int l=1,r=mx;
	while(l<r){
		int mid=(l+r)/2;
		if (check(mid))r=mid;
		else l=mid+1;
	}
	printf("%d\n",l);
	return 0;
}