Pagini recente » Cod sursa (job #1678359) | Cod sursa (job #2900030) | Cod sursa (job #2262041) | Cod sursa (job #2657382) | Cod sursa (job #2397632)
#include <bits/stdc++.h>
#define va first.first
#define vb first.second
using namespace std;
ifstream in("lapte.in");
ofstream out("lapte.out");
int dp[102][102],pr[102][102],aa[102][102],l,n,timp;
pair<pair<int,int>,int> a[102];
pair<int,int> lmao[102];
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].va);k>=0&&j-k<=s;k--)
if(dp[i][j]<dp[i-1][j-k]+(t-a[i].va*k)/a[i].vb)
{
dp[i][j]=dp[i-1][j-k]+(t-a[i].va*k)/a[i].vb;
aa[i][j]=k;
}
}
s+=t/a[i].va;
}
return dp[n][l]>=l;
}
void bk(int x,int y)
{
if(x>1)
bk(x-1,y-aa[x][y]);
lmao[a[x].second]={aa[x][y],(timp-aa[x][y]*a[x].va)/a[x].vb};
}
int main()
{
int i,r=0,pas=1<<15;
in>>n>>l;
for(i=1;i<=n;i++)
{
in>>a[i].va>>a[i].vb;
a[i].second=i;
}
sort(a,a+n);
for(;pas;pas>>=1)
if(!ok(r+pas))
r+=pas;
timp=r+1;
out<<timp<<"\n";
bk(n,l);
for(i=1;i<=n;i++)
out<<lmao[i].first<<" "<<lmao[i].second<<"\n";
return 0;
}