Pagini recente » Cod sursa (job #3190730) | Cod sursa (job #1880541) | Cod sursa (job #2378549) | Cod sursa (job #760913) | Cod sursa (job #1710640)
#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<bool>>> DP(
lim + 1, vector<vector<bool>>(
m/k + 1, vector<bool>(
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!?!?!
if(DP[a][b][c]) continue;
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;
}