![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
/**//**************************************
Problem: HEU 1011 Square
Time: 0.0400 s
Memory: 232 k
Accepted Time: 2009-03-22 14:08:04
Tips: 深度优先搜索 http://acm.hrbeu.edu.cn/forums/index.php?showtopic=2305&hl=1011
**************************************/
#include <stdio.h>
#include <string.h>
int sign,ave,length;
int a[100],table[100];
void dfs(int start,int sum,int flag)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if(flag==4)
{sign=1;return;}
else if(sign==0)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
if(sum==ave)dfs(0,0,flag+1);
else for(int i=start;i<length;i++)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
if(table[i]==0&&sum+a[i]<=ave)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
table[i]=1;
dfs(i+1,sum+a[i],flag);
table[i]=0;
}
}
}
}
int main()
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
int t;
scanf("%d",&t);
while(t--)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
int i,j,k,sum=0;
scanf("%d",&length);
for(i=0;i<length;i++)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
scanf("%d",&a[i]);
sum+=a[i];
}
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if(sum%4!=0)
{printf("no\n");continue;}
for(i=0;i<length-1;i++)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
k=i;
for(j=i+1;j<length;j++)
if(a[k]<a[j])k=j;
if(k!=i)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{int tt=a[k]; a[k]=a[i]; a[i]=tt;}
}
ave=sum/4;
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if(a[0]>ave)
{printf("no\n");continue;}
memset(table,0,sizeof(table));
sign=0;
dfs(0,0,1);
if(sign)printf("yes\n");
else printf("no\n");
}
return 0;
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
posted @
2009-04-02 11:57
主函数
阅读(
154)
评论()
编辑
收藏
举报