Cod sursa(job #1710641)

Utilizator retrogradLucian Bicsi retrograd Data 29 mai 2016 15:18:58
Problema Sate2 Scor 0
Compilator cpp Status done
Runda Arhiva ICPC Marime 0.86 kb
#include <bits/stdc++.h>

using namespace std;

int main() {
	ifstream cin("sate2.in");
	ofstream cout("sate2.out");
	int t;
	cin >> t;
	while(t--) {
		int n, m, k;
		cin >> n >> m >> k;

		vector<int> V(n + 1);
		for(int i = 1; i <= n; ++i)
			cin >> V[i];

		if(m % k) {
			cout << "NU\n";
			continue;
		}

		int lim = (k == 4 ? m/k : 0);

		vector<vector<vector<char>>> DP(
			lim + 1, vector<vector<char>>(
				m/k + 1, vector<char>(
					m/k + 1, 0
				)
			)
		);

		DP[0][0][0] = 1;
		for(int it = 1; it <= n; ++it)
		for(int a = lim; a >= 0; --a)
		for(int b = m/k; b >= 0; --b)
		for(int c = m/k; c >= 0; --c) {
			//WTF!?!?!
			DP[a][b][c] |= (a >= V[it] && DP[a - V[it]][b][c])
			            || (b >= V[it] && DP[a][b - V[it]][c])
			            || (c >= V[it] && DP[a][b][c - V[it]]);
		}

		cout << (DP[lim][m / k][m / k] ? "DA\n" : "NU\n");
		
	}

	return 0;
}