zoj 1909 Square

来源:互联网 发布:mac os x lion镜像 编辑:程序博客网 时间:2024/05/16 14:12
  1. #include<iostream>
  2. #include<algorithm>
  3. using namespace std;
  4. int  len[20];
  5. int  average;
  6. int  n;
  7. int  occ[20];
  8. bool formSquare(int i, int j, int  amount)
  9. {
  10.     if (amount < 0 || j < 0) return false;
  11.     if (amount == 0) {
  12.         if (i==2) return true;
  13.         return formSquare(i+1, n-1, average);
  14.     }
  15.     
  16.     if (!occ[j])
  17.     {
  18.         occ[j] = 1;
  19.         if (formSquare(i, j-1, amount - len[j]) ) return true;
  20.         occ[j] = 0;
  21.         while (j && len[j] == len[j-1]) j--;
  22.     }
  23.     return formSquare(i, j-1, amount);
  24. }
  25. int main()
  26. {
  27.     int k;
  28.     cin>>k;
  29.     for (int i=0; i<k; i++)
  30.     {
  31.         cin>>n;
  32.         average = 0;
  33.         for (int j=0; j<n; j++)
  34.         {
  35.             cin>>len[j];
  36.             average += len[j];
  37.         }
  38.         if (average%4) {
  39.             cout<<"no"<<endl;
  40.             continue;
  41.         }
  42.         
  43.         sort(len, len+n);
  44.         average >>= 2;
  45.         if (len[n-1] > average)
  46.         {
  47.             cout<<"no"<<endl;
  48.             continue;
  49.         }
  50.         for (int j=0; j<n; j++) occ[j] = 0;
  51.         bool done = formSquare(0, n-1, average);
  52.         if (done) cout<<"yes"<<endl;
  53.         else cout<<"no"<<endl;
  54.     }
  55. }
原创粉丝点击