Pagini recente » Cod sursa (job #2071157) | Cod sursa (job #2663206) | Cod sursa (job #138101) | Cod sursa (job #2554775) | Cod sursa (job #549779)
Cod sursa(job #549779)
#include<fstream>
#include<vector>
using namespace std;
int a[103][103],n,L,sol=102,solu[103][103];
vector<pair<int,int> >v[104];
int verifica(int t);
void solve(int st,int dr);
int rec[102][102],afis[103][3];
void afisare();
ofstream fout("lapte.out");
int main()
{
ifstream fin("lapte.in");
fin>>n>>L;
int i,c,d;
for(i=1;i<=n;i++)
{
fin>>c>>d;
v[i].push_back(make_pair(c,d));
}
solve(1,100);
fout<<sol<<endl;
afisare();
return 0;
}
void solve(int st,int dr)
{
if(st==dr)
{
if(verifica(st)==1 && st<sol)
sol=st;
return ;
}
else
{
int mij=(st+dr)/2;
int pres=verifica(mij);
if(pres==1)
{
sol=mij;
solve(st,mij);
}
else
solve(mij+1,dr);
}
}
int verifica(int t)
{
int i,j,k;
for(i=0;i<=n;i++)
for(j=0;j<=L;j++)
a[i][j]=-1;
a[0][0]=0;
for(i=1;i<=n;i++)
for(j=0;j<=L;j++)
for(k=0;k<=t/v[i][0].first;k++)
if(j-k>=0 && a[i-1][j-k]!=-1&& a[i][j]<a[i-1][j-k]+(t-k*v[i][0].first)/v[i][0].second)
{
a[i][j]=a[i-1][j-k]+(t-k*v[i][0].first)/v[i][0].second;
solu[i][j]=k;
}
if(a[n][L]>=L)
{
for(i=1;i<=n;i++)
for(j=1;j<=L;j++)
rec[i][j]=solu[i][j];
return 1;
}
else
return 0;
}
void afisare()
{
int l=L,i;
for(i=n;i>=1;i--)
{
afis[i][0]=rec[i][l];
afis[i][1]=a[i][l]-a[i-1][l-rec[i][l]];
l=l-rec[i][l];
}
for(i=1;i<=n;i++)
fout<<afis[i][0]<<" "<<afis[i][1]<<endl;
}