#include <stdio.h> #include <algorithm> using namespace std; int cas,tim,n,x,y,a[60],b[60],f[210]; int main(){ scanf("%d",&cas); for(int tim=0;tim<cas;){ scanf("%d%d%d",&n,&x,&y); for(int i=1;i<=n;i++)//下标重1开始 scanf("%d%d",&a[i],&b[i]); int l=0,r=a[1]*x+b[1]*y,m; while(l<=r){ m=(l+r)>>1; for(int i=1;i<=x;i++)f[i]=-999999999; f[0]=0; for(int i=1;i<=n;i++) for(int v=x;v>=0;v--){ f[v]+=m/b[i];//新入工人要更新 for(int j=0;j<v;j++) if (m>=(v-j)*a[i]) f[v]=max(f[v],f[j]+(m-a[i]*(v-j))/b[i]); } if(f[x]>=y)r=m-1;//最左逼近 else l=m+1; } printf("Case %d: %d\n",++tim,l); } return 0; }
|