Cod sursa(job #1985524)

Utilizator StefanMudragMudrag Stefan StefanMudrag Data 28 mai 2017 00:59:46
Problema Sate2 Scor 0
Compilator cpp Status done
Runda Arhiva ICPC Marime 1.16 kb
#include<iostream>
#include<fstream>
#include<math.h>
#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;
}