Cod sursa(job #1205189)

Utilizator sddddgjdZloteanu Anastasia sddddgjd Data 5 iulie 2014 17:09:41
Problema Lapte Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 1.27 kb
#include<stdio.h>
#define N 101
int c[N][N],d[N][N],v1[N],v2[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;
            while(n!=0){
                fprintf(fout,"%d %d\n",c[n][l],(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);
    return 0;
}