zoj 1909 Square
来源:互联网 发布:mac os x lion镜像 编辑:程序博客网 时间:2024/05/16 14:12
- #include<iostream>
- #include<algorithm>
- using namespace std;
- int len[20];
- int average;
- int n;
- int occ[20];
- bool formSquare(int i, int j, int amount)
- {
- if (amount < 0 || j < 0) return false;
- if (amount == 0) {
- if (i==2) return true;
- return formSquare(i+1, n-1, average);
- }
-
- if (!occ[j])
- {
- occ[j] = 1;
- if (formSquare(i, j-1, amount - len[j]) ) return true;
- occ[j] = 0;
- while (j && len[j] == len[j-1]) j--;
- }
- return formSquare(i, j-1, amount);
- }
- int main()
- {
- int k;
- cin>>k;
- for (int i=0; i<k; i++)
- {
- cin>>n;
- average = 0;
- for (int j=0; j<n; j++)
- {
- cin>>len[j];
- average += len[j];
- }
- if (average%4) {
- cout<<"no"<<endl;
- continue;
- }
-
- sort(len, len+n);
- average >>= 2;
- if (len[n-1] > average)
- {
- cout<<"no"<<endl;
- continue;
- }
- for (int j=0; j<n; j++) occ[j] = 0;
- bool done = formSquare(0, n-1, average);
- if (done) cout<<"yes"<<endl;
- else cout<<"no"<<endl;
- }
- }