Cod sursa(job #1746629)

Utilizator leraValeria lera Data 23 august 2016 17:25:23
Problema Ghiozdan Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.31 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("ghiozdan.in");
ofstream fout("ghiozdan.out");
int n,i,g,k,G,gg;
int gr[20001],dp[75001],lg[75001],pre[75001],nr[75001],v[20001];
int main()
{
    fin>>n>>G;
    for(i=1;i<=n;i++)
        fin>>gr[i];
    dp[0]=1;
    for(i=1;i<=n;i++)
        {
            for(g=G;g>=gr[i];g--)
                if(dp[g-gr[i]]==1 && nr[g]==0)
                {
                    dp[g]=1;
                    if(lg[g]>lg[g-gr[i]]+1 || lg[g]==0)
                        {
                            lg[g]=lg[g-gr[i]]+1;
                            pre[g]=i;
                            gg=g-gr[i];
                            while(gg!=0)
                            {
                                nr[gg]=1;
                                gg=gg-gr[pre[gg]];
                            }
                        }
                }
                else
                    nr[g]=0;
        }
    for(g=G;g>=1;g--)
        if(dp[g]==1)
        {
            k=0;
            fout<<g<<" "<<lg[g]<<'\n';
            while(g!=0)
            {
                v[++k]=pre[g];
                g=g-gr[pre[g]];
            }
            for(i=k;i>=1;i--)
                fout<<gr[v[i]]<<'\n';
            break;
        }

    return 0;
}