Cod sursa(job #253310)

Utilizator 630r63Ilinca George Mihai 630r63 Data 5 februarie 2009 17:38:53
Problema Ghiozdan Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
 #include <stdio.h>  
 #define INF 30000  
 #define Gmax 75002  
 #define N 20005  
 int g[N],f[201],n,G,v[Gmax],l[Gmax];  
 void citeste(){  
     int x;  
     freopen("ghiozdan.in","r",stdin);  
     freopen("ghiozdan.out","w",stdout);  
     scanf("%d%d",&n,&G);  
     for(int i=1;i<=n;i++){  
         scanf("%d",&x);  
         f[x]++;  
     }  
 }  
 void solve(){  
     int i,j,k,x,y;  
     for(i=200;i>=1;i--)  
         for(k=G-i;k>=0;k--)  
                 if(v[k] || !k)  
                     for(j=1;j<=f[i];j++)  
                         if(k+i*j<=G && !v[k+i*j]){  
                             v[k+i*j]=v[k+i*(j-1)]+1;  
                             l[k+i*j]=k+i*(j-1);  
                         }  
                         else break;  
     for(i=G;i>=1;i--)  
         if (v[i]){  
             printf("%d %d\n",i,v[i]);  
             break;  
         }  
     x=i;  
     y=l[x];  
     while(v[i]){  
         printf("%d\n",x-y);  
         v[i]--;  
         x=y;  
         y=l[y];  
     }  
 }  
 int main(){  
     citeste();  
     solve();  
     return 0;  
}