【POJ 2362】【検索】Square

1113 ワード

今回の先輩との検索テーマは、虐げられたのではないでしょうか.
この問題は試合後に補ったものだ.先輩コードを参考にして、枝を切るのは技術的な仕事だと感じました.
 
#include "iostream"
#include "algorithm"
using namespace std;
int a[100],vis[100];
int n,len,flag;
void dfs(int num,int ans,int k);
int main(int argc, char const *argv[])
{
  int t;
  scanf("%d",&t);
  while(t--)
  {
    int sum=0;
    scanf("%d",&n);
    for (int i = 0; i < n; ++i)
    {
      scanf("%d",&a[i]);
      sum+=a[i];
    }
    if(sum%4==0)
    {
      sort(a,a+n);
      memset(vis,0,sizeof(vis));
      flag=0;
      len=sum/4;
      dfs(0,0,0);
      flag?printf("yes
"):printf("no
"); } printf("no
"); } return 0; } void dfs(int num,int ans,int k) { if(num==3)// , , , { flag=1;return; } if(ans==len) { num++; k=0; ans=0; } for (int i = k; i < n; ++i) { if(!vis[i] && ans+a[i]<=len) { vis[i]=1; dfs(num,ans+a[i],i+1); if(flag) return; vis[i]=0; } } }