给大家推荐个靠谱的公众号程序员探索之路,大家一起加油
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int n,m;
int Time[105][2];
int dp[105][105];
int find_max(int a,int b)
{
if(a>b) return a;
else return b;
}
int check(int r)
{
int i,j,k;
memset(dp,-1,sizeof(dp));
for(j=0;j<=m&&j*Time[1][0]<=r;j++)
dp[1][j]=(r-j*Time[1][0])/Time[1][1];
for(i=2;i<=n;i++)
{
for(j=0;j<=m;j++)
{
for(k=0;k<=j&&k*Time[i][0]<=r;k++)
{
if(dp[i-1][j-k]<0)
continue;
int a_time=k*Time[i][0];
dp[i][j]=find_max(dp[i][j],dp[i-1][j-k]+(r-a_time)/Time[i][1]);
}
}
if(dp[i][m]>=m)
return 1;
}
return 0;
}
int solve()//二分
{
int lb=0,rb=10000;
while(rb-lb>=1)
{
int mid=(rb+lb)/2;
if(check(mid))
rb=mid;
else lb=mid+1;
}
return rb;
}
int main()
{
int i;
int t;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
{
scanf("%d%d",&Time[i][0],&Time[i][1]);
}
printf("%d\n",solve());
}
return 0;
}