Cod sursa(job #1712980)

Utilizator iulianrotaruRotaru Gheorghe-Iulian iulianrotaru Data 4 iunie 2016 13:38:44
Problema Sate2 Scor 100
Compilator cpp Status done
Runda Arhiva ICPC Marime 1.25 kb
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f("sate2.in");
ofstream g("sate2.out");
int i,n,m,t,k,S,ok,viz[1<<14],v[1<<12];
bool visit[1<<12];
void create()
{
    int maxim=0;
    for(int i=0;i<=m;++i) viz[i]=0;
    viz[0]=1;
    for(int i=n;i;--i)
    if(!visit[i])
    {
        for(int j=maxim;j>=0;--j)
            if(!viz[j+v[i]]&&j+v[i]<=S&&viz[j])
            {
                viz[j+v[i]]=i;
                maxim=max(maxim,j+v[i]);
                if(j+v[i]==S)
                {
                    int p=S;
                    while(p>0)
                    {
                        visit[viz[p]]=1;
                        p-=v[viz[p]];
                    }
                    return ;
                }
            }
    }
    ok=0;
}
int main()
{
    f>>t;
    while(t--)
    {
        f>>n>>m>>k;
        S=m/k;
        for(i=ok=1;i<=n;++i)
        {
            f>>v[i];
            visit[i]=0;
        }
        if(m%k!=0)
        {
            g<<"NU\n";
            continue;
        }
        sort(v+1,v+n+1);
        while(ok&&k>1)
        {
            create();
            k--;
        }
        if(ok) g<<"DA\n";
        else g<<"NU\n";
    }
    return 0;
}