Pagini recente » Cod sursa (job #2591679) | Cod sursa (job #2885474) | Cod sursa (job #1971712) | Cod sursa (job #132880) | Cod sursa (job #1709715)
#include<cstdio>
#include<algorithm>
#define M 90000
#define N 3000
using namespace std;
bool viz[M+1];
int chestie[M+1];
int v[N+1];
void solve(int n,int m,int k){
if (m%k!=0){
printf ("NU\n");
return ;
}
int sat=m/k,i,j;
for(;k>0;k--){
sort(v+1,v+n+1);
while(v[n]==M+1) n--;
viz[0]=true;
for(i=n;i>0 &&viz[sat]==false;i--){
for(j=m-v[i];j>=0;j--){
if (viz[j+v[i]]==false &&viz[j]==true){
viz[j+v[i]]=true;
chestie[v[i]+j]=i;
}
}
}
if (viz[sat]==false){
printf ("NU\n");
return ;
}
j=sat;
while(j!=0){
i=chestie[j];
j=j-v[i];
v[i]=M+1;
}
for(i=0;i<=m;i++){
viz[i]=0;
chestie[i]=0;
}
}
printf ("DA\n");
}
int main(){
freopen ("sate2.in","r",stdin);
freopen ("sate2.out","w",stdout);
int n,m,t,i,k;
scanf ("%d",&t);
for(;t>0;t--){
scanf ("%d%d%d",&n,&m,&k);
for(i=1;i<=n;i++)
scanf ("%d",&v[i]);
solve(n,m,k);
}
return 0;
}