Pagini recente » Cod sursa (job #858805) | Cod sursa (job #1963351) | Cod sursa (job #990948) | Cod sursa (job #1686501) | Cod sursa (job #3161614)
#include <bits/stdc++.h>
#pragma optimize GCC ("Ofast")
#pragma GCC optimize("O3")
#pragma GCC optimize("unroll-loops")
///#include <tryhardmode>
///#include <GODMODE::ON>
using namespace std;
#define int long long
ifstream fin ("lapte.in");
ofstream fout ("lapte.out");
const int NMAX=1e2+5;
const int INF=-1e9;
int dp[NMAX][NMAX]; ///dp[i][j] = nr maxim de litri de lapte b stiind ca bem j litri cu primii i
int viz[NMAX][NMAX];
int n,l;
struct elem{
int a;
int b;
}v[NMAX],rez[NMAX];
bool check(int time)
{
int i,j,k;
for(i=1;i<=n;i++)
for(j=0;j<=l;j++)
dp[i][j]=INF;
for(i=0;i<=l;i++)
if(time-v[1].a*i>=0)
dp[1][i]=(time-v[1].a*i)/v[1].b;
else
dp[1][i]=INF;
for(i=2;i<=n;i++)
{
for(j=0;j<=l;j++)
{
for(k=0;k<=j;k++)
{
if(time-v[i].a*(j-k)>=0 && dp[i-1][k]+(time-v[i].a*(j-k))/v[i].b>dp[i][j])
{
dp[i][j]=dp[i-1][k]+(time-v[i].a*(j-k))/v[i].b;
viz[i][j]=k;
}
}
}
}
if(dp[n][l]>=l)
return true;
return false;
}
signed main()
{
ios_base::sync_with_stdio(false);
fin.tie(NULL);
fout.tie(NULL);
int i,j,x;
fin>>n>>l;
x=l;
for(i=1;i<=n;i++)
fin>>v[i].a>>v[i].b;
int st=0,dr=-INF,mij,ans=-1;
while(st<dr)
{
mij=st+dr;
mij/=2;
if(check(mij)==true)
{
ans=mij;
dr=mij-1;
}
else
st=mij+1;
}
fout<<ans<<"\n";
for(i=n;i>=1;i--)
{
rez[i].a=x-viz[i][x];
if(ans-(x-viz[i][x])*v[i].a>=0)
rez[i].b=(ans-(x-viz[i][x])*v[i].a)/v[i].b;
else
rez[i].b=0;
x=viz[i][x];
}
for(i=1;i<=n;i++)
fout<<rez[i].a<<" "<<rez[i].b<<"\n";
fin.close();
fout.close();
return 0;
}