範例程式碼 uva10364
//uva10364
#include<cstdio>
#include<algorithm>
using namespace std;
bool dfs(int sum, int x, int y, int l, int m, int a[], int c[])
{
if (y == 3) return true;
for (int i = x; i < m; i++){
if (sum + a[i] <= l && c[i]){
c[i] = 0, sum += a[i];
if (sum == l){
if (dfs(0, 0, y+1, l, m, a, c))
return true;
else
c[i] = 1, sum -= a[i];
}
else if (dfs(sum, i+1, y, l, m, a, c))
return true;
else
c[i] = 1, sum -= a[i];
}
}return false;
}
int main()
{
int m, a[25], c[25], cas;
scanf("%d", &cas);
while (cas--){
int sum = 0;
scanf("%d", &m);
for (int i = 0; i < m; i++)
scanf("%d",&a[i]), c[i] = 1, sum += a[i];
sort(a, a+m);
if (sum%4 || a[m-1] > sum/4)
printf("no\n");
else if (dfs(0, 0, 0, sum/4, m, a, c))
printf("yes\n");
else
printf("no\n");
}
}