Pagini recente » Cod sursa (job #263394) | Cod sursa (job #2373277) | Cod sursa (job #689511) | Cod sursa (job #3193277) | Cod sursa (job #2421920)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("lapte.in");
ofstream fout("lapte.out");
int n,q;
int va[111],vb[111];
int dp[111][111];
int pr[111][111];
bool check(int time)
{
for (int i=0; i<=n; i++)
{
for (int j=0; j<=q; j++)
{
dp[i][j]=-1;
}
}
dp[0][0]=0;
for (int i=1; i<=n; i++)
{
for (int j=0; j<=q; j++)
{
for (int k=0; k<=min(j,time/va[i]); k++)
if (dp[i-1][j-k] !=-1 && dp[i-1][j-k]+(time-k*va[i])/ vb[i]>dp[i][j])
{
dp[i][j]=dp[i-1][j-k]+(time-k*va[i])/vb[i];
pr[i][j]= k;
}
}
}
return dp[n][q]>=q;
}
void solve(int i,int j,int time)
{
if (i>1)
{
solve(i-1,j-pr[i][j],time);
}
fout<<pr[i][j]<<' '<<(time-pr[i][j]*va[i])/vb[i]<<"\n";
}
int main()
{
fin>>n>>q;
for (int i=1; i<=n; i++)
{
fin>>va[i]>>vb[i];
}
int st=0,dr=101;
while (st<dr)
{
int mij=(st+dr)/2;
if (check(mij))
{
dr=mij;
}
else
{
st=mij;
}
}
fout<<dr<<"\n";
check(dr);
solve(n,q,dr);
return 0;
}