Pagini recente » Cod sursa (job #624725) | Cod sursa (job #1608839) | Cod sursa (job #955686) | Cod sursa (job #2088387) | Cod sursa (job #2210303)
#include <bits/stdc++.h>
#define N 102
using namespace std;
ifstream fin("lapte.in");
ofstream fout("lapte.out");
int n, l, spd[N][2], sol[N][2], timeB[N][N], dp[N][N];
int verif(int tmp)
{
int i, j, k;
for(i=0; i<=n; i++)
for(j=0; j<=l; j++)
dp[i][j]=INT_MIN;
for(i=1; i<=n; i++)
for(j=0; j<=l && tmp-j*spd[i][0]>=0; j++)
timeB[i][j]=(tmp-j*spd[i][0])/spd[i][1];
dp[0][0]=0;
for(i=1; i<=n; i++)
for(j=0; j<=l; j++)
for(k=0; k<=j && tmp-k*spd[i][0]>=0; k++)
dp[i][j]=max(dp[i][j],dp[i-1][j-k]+timeB[i][k]);
return (dp[n][l]>=l);
}
int bs()
{
int st=0, dr=101, mid, sol;
while(st<=dr){
mid=st+(dr-st)/2;
if(verif(mid)){
sol=mid;
dr=mid-1;
}
else st=mid+1;
}
return sol;
}
int main()
{
int i, j, sl, tmp;
fin>>n>>l;
for(i=1; i<=n; i++)
fin>>spd[i][0]>>spd[i][1];
sl=bs();
fout<<sl<<'\n';
verif(sl);
tmp=sl;
sl=l;
for(i=n; i>=1; i--)
{
for(j=0; j<=sl && tmp-j*spd[i][0]>=0; j++)
if(dp[i][sl]==dp[i-1][sl-j]+timeB[i][j]){
sol[i][0]=j;
sol[i][1]=timeB[i][j];
sl-=j;
break;
}
}
for(i=1; i<=n; i++)
fout<<sol[i][0]<<' '<<sol[i][1]<<'\n';
return 0;
}