Cod sursa(job #2019279)

Utilizator lucametehauDart Monkey lucametehau Data 7 septembrie 2017 14:02:34
Problema Ghiozdan Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <fstream>

using namespace std;
ifstream cin("ghiozdan.in");
ofstream cout("ghiozdan.out");
int n,g,i,j,k,x,mx,num,f[201],ok[20001],nr[20001];
int main()
{
    cin>>n>>g;
    for(i=1;i<=n;i++)
    {
        cin>>x;
        if(x>mx)
            mx=x;
        f[x]++;
    }
    ok[0]=1;
    for(i=mx;i>=1;i--)
    {
        bool stg=1;
        for(j=g;j>=0;j--)
        {
            if(ok[j])
            {
                for(k=1;k<=f[i]&&k*i+j<=g;k++)
                {
                    if(nr[k*i+j]==0||nr[k*i+j]>nr[j]+k+1)
                    {
                        ok[k*i+j]=(k-1)*i+j+1;
                        nr[k*i+j]=nr[j]+k;
                        stg=0;
                    }
                }
            }
            if(n>500&&stg==0)
                break;
        }
    }
    i=g;
    while(ok[i]==0&&i>=1)i--;
    cout<<i<<" "<<nr[i]<<"\n";
    while(i)
    {
        cout<<i-(ok[i]-1)<<"\n";
        i=ok[i]-1;
    }
    return 0;
}