Cod sursa(job #2153320)

Utilizator andrei32576Andrei Florea andrei32576 Data 6 martie 2018 09:42:54
Problema Euro Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.47 kb
#include<fstream>
#include<algorithm>
using namespace std;

int T,t,n,vmax,i,j;
int v[4005],ok[8005],minn[8005],maxx[8005];
int inf=2000000000;

ifstream f("euro.in");
ofstream g("euro.out");

int main()
{
    f>>T;
    for(t=1;t<=T;t++)
    {
        f>>n>>vmax;
        for(i=1;i<=n;i++)
            f>>v[i];
        sort(v+1,v+n+1);

        ok[0]=1;
        minn[0]=inf;
        maxx[0]=0;
        for(i=1;i<=vmax;i++)
        {
            ok[i]=0;
            minn[i]=inf;
            maxx[i]=0;
        }

        for(i=1;i<=n;i++)
        {
            for(j=vmax-v[i];j>=0;j--)
            {
                if(ok[j]==1)
                {
                    ok[j+v[i]]=1;
                    if(minn[j+v[i]]==inf)
                    {
                        minn[j+v[i]]=min(v[i],minn[j]);
                        maxx[j+v[i]]=max(v[i],maxx[j]);
                    }
                    else
                    {
                        if((max(maxx[j],v[i])-min(minn[j],v[i]))<(maxx[j+v[i]]-minn[j+v[i]]))
                        {
                            minn[j+v[i]]=min(minn[j],v[i]);
                            maxx[j+v[i]]=max(maxx[j],v[i]);
                        }
                    }
                }
            }
        }

        for(i=1;i<=vmax;i++)
            if(ok[i]==0) g<<"-1 ";
            else g<<maxx[i]-minn[i]<<" ";
        g<<"\n";

    }

    f.close();
    g.close();
    return 0;
}