Cod sursa(job #640272)

Utilizator idomiralinIdomir Alin idomiralin Data 25 noiembrie 2011 09:20:29
Problema Ghiozdan Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.23 kb
# include <cstdio>

using namespace std;

int max, n, G, i, j, k;
int ct[20005], a[20005], A[75005], rez[75005], cate[75005];
int main()
{
    freopen("ghiozdan.in","r",stdin);
    freopen("ghiozdan.out","w",stdout);
    
    scanf("%d%d",&n,&G);
    
    for (i = 1; i <= n; i++)
    {
        scanf("%d",&a[i]);
        ct[a[i]]++;
        if (max < a[i]) max = a[i];
        }
        
    for (i = 1; i <= G; i++)    
        A[i] = 100000;
        
    for (i = max; i >= 1; i--)
    if (ct[i])
        for (j = G; j >= i - 1; j--)
            for (k = 1; k <= ct[i] && j >= k * i; k++)
            if (A[j] > A[j - i * k] + k && A[j] == 100000)
            {
                     A[j] = A[j - i * k] + k;
                     rez[j] = i;
                     cate[j] = k;
                     printf("%d %d %d\n",j,rez[j],cate[j]);
                     }
            /*else
            {
                 printf("cacat %d %d %d\n",i,j,k);
                 break;
                       }*/
    printf("\n");
    
    while (A[G] == 100000) G--;
    printf("%d %d\n",G,A[G]);
    
    while (G)
    {
          printf("%d\n",rez[G]);
          G = G - rez[G];         
          }
          
return 0;
}