Cod sursa(job #1839049)

Utilizator ipus1Stefan Enescu ipus1 Data 2 ianuarie 2017 13:02:43
Problema Lapte Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.28 kb
#include<cstdio>
struct aa{int x,y;};
aa v[101],sol[101];
struct aaa{int x,y,c,poz;};
aaa ma[110][210];
int main ()
{freopen ("lapte.in","r",stdin);
freopen ("lapte.out","w",stdout);
int n,x,k,s,c1,c2,pp,q,i,j,l,minn,poz;
scanf("%d%d",&n,&k);
for(i=1;i<=n;i++)
    scanf("%d%d",&v[i].x,&v[i].y);
c1=1;
c2=200000;
while(c1<=c2)
    {x=(c1+c2)/2;
    pp=0;
    for(i=0;i<=n;i++)
        for(j=0;j<=k;j++)
            ma[i][j].c=-1000000;
    ma[0][0].c=0;
    for(i=1;i<=n;i++)
        for(j=0;j<=k;j++)
            for(l=0;j+l<=k&&l*v[i].y<=x;l++)
                if(ma[i][j+l].c<ma[i-1][j].c+(x-l*v[i].y)/v[i].x)
                    {
                    ma[i][j+l].c=ma[i-1][j].c+(x-l*v[i].y)/v[i].x;
                    ma[i][j+l].poz=j;
                    ma[i][j+l].y=l;
                    ma[i][j+l].x=(x-l*v[i].y)/v[i].x;
                    }
    if(ma[n][k].c>=k)
        {poz=ma[n][k].poz;
        sol[n].x=ma[n][k].x;
        sol[n].y=ma[n][k].y;
        for(i=n-1;i>=1;i--)
            {sol[i].x=ma[i][poz].x;
            sol[i].y=ma[i][poz].y;
            poz=ma[i][poz].poz;
            }
        q=x;
        c2=x-1;
        }
    else
        c1=x+1;
    }
printf("%d\n",q);
for(i=1;i<=n;i++)
    printf("%d %d\n",sol[i].x,sol[i].y);
return 0;
}