Pagini recente » Cod sursa (job #2737477) | Cod sursa (job #2450789) | Cod sursa (job #639060) | Cod sursa (job #1400483) | Cod sursa (job #1985523)
#include<iostream>
#include<fstream>
#define NMAX 3001
using namespace std;
ifstream fin("sate2.in");
ofstream fout("sate2.out");
int N, M, K;
int cat[NMAX];
int st[4];
bool done=false;
bool check()
{
for (int i = 0; i < K; ++i)
{
if (st[i] != M / K) return false;
}
return true;
}
void solve(int k)
{
if (k == N )
{
if (check()) done = true;
return;
}
bool ok = true;
for (int i = k; i < N && ok && !done ; ++i)
{
ok = false; // daca il ia
for (int j = 0; j < K && !done; ++j)
{
if (st[j] + cat[i] > M / K)continue;
st[j] += cat[i];
solve(k + 1);
st[j] -= cat[i];
ok = true;
}
if (done == false) break;
}
}
int main()
{
int t;
bool bad;
fin >> t;
while (t--)
{
fin >> N >> M >> K;
bad = false;
for (int i = 0; i < N; ++i)
{
fin >> cat[i];
if (cat[i] > M / K) bad = true;
}
if (M / K != floor(M / K)) bad = true;
if (bad) fout << "NU\n";
else
{
for (int i = 0; i < K; ++i) st[i] = 0;
done = false;
solve(0);
if (done == true) fout << "DA\n";
else fout << "NU\n";
}
}
return 0;
}