HDU1518 Square

作者在 2008-05-16 14:09:42 发布以下内容

http://acm.hdu.edu.cn/showproblem.php?pid=1518

DFS   开始的时候回朔问题没有考虑清楚

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int stick[22];
int k[22];
int n,sum,average,temp;

int cmp ( const void *a , const void *b )
{
 return *(int *)b - *(int *)a;
}

void dfs(int numbers,int sticks,int real_time_sum)
{
 int i;
 if(sticks==3)
 {
  temp=1;
  return;
 }
 for(i=numbers;i<n&&!temp;i++)
 {
  if(k[i]==0)
  {
   k[i]=1;
            if(real_time_sum + stick[i] == average)
   {
    dfs(0, sticks + 1, 0);
            }
            else if(real_time_sum + stick[i] < average)
   {
                dfs(i+1,sticks, real_time_sum + stick[i]);
            }
   k[i]=0;
        }
 }
 return;
}
void main()
{
    int t,max,i;
 scanf("%d",&t);
    while(t--)
 {
        memset(stick,0,sizeof(stick));
        memset(k,0,sizeof(k));
  scanf("%d",&n);
  sum=0;
  max=0;
        for(i=0;i<n;i++)
  {
   scanf("%d",&stick[i]);
            sum+=stick[i];
   if(stick[i]>max)
    max=stick[i];
        }
        if(sum%4||sum/4<max)
  {
   printf("no\n");
            continue;
        }
        average=sum/4;
  qsort(stick,n,sizeof(stick[0]),cmp);
  temp=0;dfs(0,0,0);
        if(temp)
   printf("yes\n");
        else
   printf("no\n");
    }
}

ACM | 阅读 4218 次
文章评论,共0条
游客请输入验证码
最新评论