比赛 |
2016-10-11 4 syz |
评测结果 |
AAAAAAAAAA |
题目名称 |
软件开发 |
最终得分 |
100 |
用户昵称 |
安呐一条小咸鱼。 |
运行时间 |
0.087 s |
代码语言 |
C++ |
内存使用 |
0.36 MiB |
提交时间 |
2016-10-11 19:29:36 |
显示代码纯文本
- #include<iostream>
- #include<cstdlib>
- #include<cstdio>
- #include<cstring>
- #include<queue>
- using namespace std;
- const int maxn = 110 ;
- int n,tot,a[maxn],b[maxn],f[maxn][maxn],temp,l,r,mid;
- bool Dp(int x)
- {
- memset(f,-0x3f,sizeof(f));
- f[0][0]=0;
- for(int i=1;i<=n;i++)
- {
- for(int j=0;j<=tot;j++)
- {
- for(int k=0;k<=j;k++)
- {
- if(x < k * a[i] )continue;
- f[i][j]=max( f[i][j] , f[i-1][j-k] + ( x- k * a[i] ) / b[i] );
- }
- }
- }
- if(f[n][tot]<tot)return false;
- return true;
- }
- int main()
- {
- freopen("time.in","r",stdin);
- freopen("time.out","w",stdout);
- scanf("%d%d",&n,&tot);
- for(int i=1;i<=n;i++){
- scanf("%d%d",&a[i],&b[i]);
- temp=max(temp,max(a[i],b[i]));
- }
- l=1,r=temp*tot*8;
- while(l<r){
- int mid=(l+r)/2;
- if(Dp(mid))r=mid;
- else l=mid+1;
- }
- printf("%d\n",l);
- }