Cod sursa(job #1205191)

Utilizator sddddgjdZloteanu Anastasia sddddgjd Data 5 iulie 2014 17:20:47
Problema Lapte Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 1.38 kb
#include<stdio.h>
#define N 101
int c[N][N],d[N][N],v1[N],v2[N],sol1[N],sol2[N];
FILE *fout;
void solve(int n,int l){

    int i,j;
    for(i=0; i<=n; i++)
        for(j=0; j<=l; j++)
            d[i][j]=-999999999;
    d[0][0]=0;
    int timp;
    for(timp=1; timp<=100; timp++){
        int k;
        for(i=1; i<=n; i++)
            for(j=0; j<=l; j++)
                for(k=0; k<=timp/v1[i]; k++)
                    if(d[i][j]<d[i-1][j-k]+(timp-k*v1[i])/v2[i]){
                        c[i][j]=k;
                        d[i][j]=d[i-1][j-k]+(timp-k*v1[i])/v2[i];
                    }
        if(d[n][l]>=l){
            fprintf(fout,"%d\n",timp);
            int cop=timp,cont=0;
            while(n!=0){
                sol1[cont]=c[n][l];
                sol2[cont++]=(cop-c[n][l]*v1[n])/v2[n];
                timp=l;
                l-=c[n][l];
                n--;
            }
            return 0;
        }
        for(i=0; i<=n; i++)
            for(j=0; j<=l; j++)
                d[i][j]=-999999999;
        d[0][0]=0;
    }
}
int main(){
    FILE *fin;
    fin=fopen("lapte.in","r");
    fout=fopen("lapte.out","w");
    int n,l;
    fscanf(fin,"%d%d",&n,&l);
    int i;
    for(i=1; i<=n; i++)
        fscanf(fin,"%d%d",&v1[i],&v2[i]);
    solve(n,l);
    for(i=0;i<n;i++)
        fprintf(fout,"%d %d\n",sol1[i],sol2[i]);
    return 0;
}