标签:http io ar for sp 问题 c on 代码
题目链接
http://acm.hdu.edu.cn/showproblem.php?pid=1518
题意:给你n条边,问你用光这些边能不能组成正方形
这里主要是超时问题:其实对于某条边,对于那些用过的和不符合条件的for那里可以不扫。。。。。所以Dfs要增加一个参数index表示从那里开始扫。。。但是换另外一条边的时候index要改回0,因为那些未用的,对上一条边来说
不符合条件的,可能符合这条边的条件。。。。
代码
#include<stdio.h>
#include<string.h>
int success,l,m;
int s[1000];
int visit[1000];
int main(void)
{
void dfs(int now,int len,int index);
int n,i;
scanf("%d",&n);
while(n--)
{
int sum=0;
success=0;
scanf("%d",&m);
for(i=0;i<m;i++)
{
scanf("%d",s+i);
sum+=s[i];
}
if(sum%4)
{
printf("no\n");
continue;
}
l=sum/4;
for(i=0;i<m;i++)
{
if(s[i]>l)
{
printf("no\n");
break;
}
}
if(i<m)
continue;
memset(visit,0,sizeof(visit));
dfs(1,0,0);
if(success)
printf("yes\n");
else
printf("no\n");
}
return 0;
}
void dfs(int now,int len,int index)
{
int i;
if(now==5)
{
success=1;
return ;
}
if(len==l)
{
dfs(now+1,0,0);
if(success)
return ;
}
for(i=index;i<m;i++)
{
if(visit[i]==0&&len+s[i]<=l)
{
visit[i]=1;
dfs(now,len+s[i],i+1);
if(success)
return ;
visit[i]=0;
}
}
}
标签:http io ar for sp 问题 c on 代码
原文地址:http://www.cnblogs.com/liudehao/p/4005810.html