zoj1909 Square dfs+优化(参考别人的)

来源:互联网 发布:社交网络发展历程 编辑:程序博客网 时间:2024/05/22 14:52

本以为自己对dfs了解的可以了,可是这道题,我还是参看了别人的代码,自己设计的dfs不论怎样跳出,一直TLE。。。伤不起啊。。。

里面是各种return。。。。。。

#include<stdio.h>#include<string.h>#include<iostream>#include<algorithm>using namespace std;int vis[20],len[20],n,aver;int dfs(int i,int j,int amount){  if(amount<0||j<0) return 0;  if(amount==0)  {    if(i==2) return 1;    return dfs(i+1,n-1,aver);  }  if(!vis[j])  {    vis[j]=1;    if(dfs(i,j-1,amount-len[j])) return 1;    vis[j]=0;    while(j&&len[j]==len[j-1])      j--;  }  return dfs(i,j-1,amount);}int main(){  int k,i,flag;  scanf("%d",&k);  while(k--)  {    scanf("%d",&n);    aver=0;    for(i=0;i<n;i++)    {      scanf("%d",&len[i]);      aver+=len[i];    }    if(aver%4)    {      printf("no\n");      continue;    }    else    {      aver/=4;      sort(len, len+n);      if(len[n-1]>aver)      {        printf("no\n");        continue;      }      memset(vis,0,sizeof(vis));      flag=dfs(0,n-1,aver);      if(flag) printf("yes\n");      else  printf("no\n");    }  }  return 0;}      


 

原创粉丝点击