Pagini recente » Cod sursa (job #1703252) | Cod sursa (job #727755) | Cod sursa (job #438887) | Cod sursa (job #1863248) | Cod sursa (job #2642520)
#include <bits/stdc++.h>
using namespace std;
ifstream f("lapte.in");
ofstream g("lapte.out");
int n,cant,i,st,dr,mij,restb,t,k,sol;
struct wow
{
int x,y;
}v[105];
struct mama
{
int x,y,ind;
};
pair <int,int> solutii[105];
bool ok (int timp)
{
int din[105][105],j,lima,din1[105][105],copie;
pair <int,int> valori[105];
for (i=1;i<=n;i++)
{
valori[i]={0,0};
}
mama tata[105][105];
for (i=0;i<=cant;i++)
{
for (j=0;j<=cant;j++)
{
din[i][j]=din1[i][j]=-1;
tata[i][j].x=tata[i][j].y=tata[i][j].ind=0;
}
}
din[0][0]=0;
din1[0][0]=0;
for (i=1;i<=n;i++)
{
lima=timp/v[i].x;
for (j=0;j<=lima;j++)
{
restb=(timp-j*v[i].x)/v[i].y;
for (t=cant;t>=0;t--)
{
for (k=cant;k>=0;k--)
{
if (din[t][k]!=-1)
{
din1[min(t+j,cant)][min(k+restb,cant)]=0;
if (tata[min(t+j,cant)][min(k+restb,cant)].ind==0)
{
tata[min(t+j,cant)][min(k+restb,cant)].x=t;
tata[min(t+j,cant)][min(k+restb,cant)].y=k;
tata[min(t+j,cant)][min(k+restb,cant)].ind=i;
}
}
}
}
}
for (t=0;t<=cant;t++)
{
for (k=0;k<=cant;k++)
{
din[t][k]=din1[t][k];
}
}
}
if (din[cant][cant]==0)
{
i=cant;
j=cant;
while (i!=0&&j!=0)
{
valori[tata[i][j].ind]={i-tata[i][j].x,j-tata[i][j].y};
copie=i;
i=tata[i][j].x;
j=tata[copie][j].y;
}
valori[tata[i][j].ind]={i-tata[i][j].x,j-tata[i][j].y};
for (i=1;i<=n;i++)
{
solutii[i]=valori[i];
}
return 1;
}
return 0;
}
int main()
{
f>>n>>cant;
for (i=1;i<=n;i++)
{
f>>v[i].x>>v[i].y;
}
st=1;
dr=100;
while (st<=dr)
{
mij=(st+dr)/2;
if (ok(mij)==1)
{
sol=mij;
dr=mij-1;
}
else
{
st=mij+1;
}
}
g<<sol<<'\n';
for (i=1;i<=n;i++)
{
g<<solutii[i].first<<" "<<solutii[i].second<<'\n';
}
return 0;
}