Pagini recente » Cod sursa (job #3279878) | Cod sursa (job #2506094) | Cod sursa (job #3178815) | Cod sursa (job #1862921) | Cod sursa (job #1052834)
#include <fstream>
#include<string.h>
using namespace std;
ifstream f("lapte.in");
ofstream g("lapte.out");
int n,l,a[101],b[101],v[101][101],sol[101][101],i,tbun,x[101],soll[101][101];
int din(int t){
for(int i=0;i<=n;i++)
for(int j=1;j<=l;j++)
v[i][j]=-1;
memset(soll,0,sizeof(soll));
for(int i=0;i*a[1]<=t;i++){
v[1][i]=(t-i*a[1])/b[1];
//soll[1][i]=i;
}
for(int i=2;i<=n;i++)
for(int j=0;j<=l;j++)
for(int k=0;k<=j;k++)
if((j-k)*a[i]<=t&&v[i-1][k]!=-1)
if(v[i][j]<v[i-1][k]+(t-(j-k)*a[i])/b[i]){
v[i][j]=v[i-1][k]+(t-(j-k)*a[i])/b[i];
soll[i][j]=k;
}
if(v[n][l]>=l)
return 1;
return 0;
}
/*void reconstit(int n,int k){
int t=n;int nr=0;
while(t>1){
nr++;
x[nr][1]=k-soll[t][k];
//x[nr][2]=sol[t][k]-sol[t-1][soll[t][k]];
x[nr][2]=(tbun-x[nr][1]*a[t])/b[t];
k=soll[t][k];
t--;
}
nr++;
x[nr][1]=k;
x[nr][2]=sol[1][k];
for(int i=nr;i>=1;i--)
g<<x[i][1]<<" "<<x[i][2]<<"\n";
}*/
void reconstit(int n,int k){
int tt=n;int nr=0;
while(tt>=1){
nr++;
x[nr]=k;
k=soll[tt][k];
tt--;
}
g<<x[nr]<<" "<<sol[1][x[nr]]<<'\n';
for(int i=nr-1,tt=2;i>=1;i--,tt++){
g<<x[i]-x[i+1]<<" "<<sol[tt][x[i]]-sol[tt-1][x[i+1]]<<'\n';
}
}
int main()
{
f>>n>>l;
for(i=1;i<=n;i++){
f>>a[i]>>b[i];
}
int p=0;
int u=10000;
while(p<=u){
int mij=(p+u)/2;
int k=din(mij);
if(k){
tbun=mij;
memcpy(sol,v,sizeof(v));
u=mij-1;
}
else
p=mij+1;
}
g<<tbun<<'\n';
reconstit(n,l);
return 0;
}