Pagini recente » Cod sursa (job #2033398) | Cod sursa (job #18660) | Cod sursa (job #29707) | Borderou de evaluare (job #1004096) | Cod sursa (job #2397620)
#include <bits/stdc++.h>
using namespace std;
ifstream in("lapte.in");
ofstream out("lapte.out");
int dp[102][102],pr[102][102],aa[102][102],l,n,a[102],b[102],timp;
bool ok(int t)
{
int i,j,k,s=0;
for(i=1;i<=n;i++)
{
for(j=0;j<=l;j++)
{
dp[i][j]=0;
for(k=min(j,t/a[i]);k>=0&&j-k<=s;k--)
if(dp[i][j]<dp[i-1][j-k]+(t-a[i]*k)/b[i])
{
dp[i][j]=dp[i-1][j-k]+(t-a[i]*k)/b[i];
aa[i][j]=k;
}
}
s+=t/a[i];
}
return dp[n][l]>=l;
}
void bk(int x,int y)
{
if(x>1)
bk(x-1,y-aa[x][y]);
out<<aa[x][y]<<" "<<(timp-aa[x][y])/b[x]<<"\n";
}
int main()
{
int i,r=0,pas=1<<15;
in>>n>>l;
for(i=1;i<=n;i++)
in>>a[i]>>b[i];
for(;pas;pas>>=1)
if(!ok(r+pas))
r+=pas;
timp=r+1;
out<<timp<<"\n";
bk(n,l);
return 0;
}