Cod sursa(job #324519)

Utilizator Magnuscont cu nume gresit sau fals Magnus Data 16 iunie 2009 14:07:39
Problema Ghiozdan Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#include<stdio.h>
#define M 75005   
#define N 20007   
int nr[205],v[M],a[M];   
int main(){   
    int x,i,j,k,n,g,y,q;   
    freopen("ghiozdan.in","r",stdin);   
    freopen("ghiozdan.out","w",stdout);   
    scanf("%d%d",&n,&g);   
    for(i=1;i<=n;++i){   
        scanf("%d",&x);   
        nr[x]++;   
    }   
    for(i=200;i>=1;--i)   
        for(k=g-i;k>=0;--k)   
            if(!k||v[k])   
                for(j=1;j<=nr[i];++j){   
                    q=k+i*j;   
                    if(!v[q]&&g>=q){   
                        v[q]=v[q-i]+1;   
                        a[q]=q-i;   
                    }   
                    else   
                        break;   
                }   
    for(i=g;i>=1;--i)   
        if(v[i]){   
            printf("%d %d\n",i,v[i]);   
            break;   
        }   
    x=i;   
    y=a[i];   
    while(v[i]){   
        printf("%d\n",x-y);   
        --v[i];   
        x=y;   
        y=a[x];   
    }   
    fclose(stdin);   
    fclose(stdout);   
    return 0;   
}