Use 0-1 backpack algorithm can solve this problem . But I use DFS.
I misunderstanding the problem's meaning.My algorithm is Wrong.But the test data is so weak that I can pass this problem.
The portal:4108. Hearthstone 4108. Hearthstone
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
int monsters[20];
int magic[105];
int N,M,A,B,min_sum;
void DFS(int depth,int sum){
if(depth>N)return ;
if(sum >= B){
if(sum < min_sum){
min_sum = sum;
}
return ;
}
DFS(depth+1,sum+monsters[depth]);
DFS(depth+1,sum);
}
void Find_Mincost(int value){
min_sum = 10000000;
DFS(0,0);
//printf("%d\n",min_sum);
}
void Deal_with(){
int T;
scanf("%d",&T);
while(T--){
scanf("%d %d %d %d",&N,&M,&A,&B);
int sum_monsters = 0;
for(int i=0;i<N;i++){
scanf("%d",monsters+i);
sum_monsters += monsters[i];
}
int sum_magic = 0;
for(int i=0;i<M;i++){
scanf("%d",magic+i);
sum_magic += magic[i];
}
Find_Mincost(B);
if(min_sum == 10000000)min_sum = sum_monsters;
int ans = sum_monsters - min_sum + sum_magic;
//printf("%d",min_sum);
if(ans < A){
puts("wash your face");
}
else {
puts("wellplay");
}
}
}
int main(void){
freopen("a.in","r",stdin);
Deal_with();
return 0;
}