比赛 |
2016-10-11 4 syz |
评测结果 |
AAAAAAAAAA |
题目名称 |
软件开发 |
最终得分 |
100 |
用户昵称 |
森林 |
运行时间 |
0.030 s |
代码语言 |
C++ |
内存使用 |
0.36 MiB |
提交时间 |
2016-10-11 18:57:13 |
显示代码纯文本
#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<queue>
#include<stack>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#define WJ(name) freopen(#name".in","r",stdin);freopen(#name".out","w",stdout);
#define JW fclose(stdin);fclose(stdout);
using namespace std;
int n,m,d[110][3],l,r,b=0,mid,f[110][110];
inline void QR(int& x){
char ch;
while(ch=getchar(),ch<'0'||ch>'9');
x=ch-48;
while(ch=getchar(),'0'<=ch&&ch<='9')x=x*10+ch-48;
}
inline void QW(int num){
int cnt=0;char str[30];
while(str[++cnt]=num%10+48,num/=10);
while(putchar(str[cnt]),--cnt);
}
int main(){
WJ(time);
QR(n),QR(m);
memset(d,0,sizeof(d));
for(int i=1;i<=n;i++){
QR(d[i][1]),QR(d[i][2]);
b=max(b,max(d[i][1],d[i][2]));
}
l=1,r=m*b;
while(l<=r){
mid=(l+r)>>1;
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&&mid>=k*d[i][1];++k)
if(f[i-1][j-k]<0)continue;
else f[i][j]=max(f[i][j],f[i-1][j-k]+(mid-k*d[i][1])/d[i][2]);
if(f[n][m]<m)l=mid+1;
else r=mid-1;
}
QW(l);
JW;
return 0;
}