码迷,mamicode.com
首页 > 其他好文 > 详细

HDU-1518-Square

时间:2014-10-04 12:40:16      阅读:189      评论:0      收藏:0      [点我收藏+]

标签: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;
}
}
}

HDU-1518-Square

标签:http   io   ar   for   sp   问题   c   on   代码   

原文地址:http://www.cnblogs.com/liudehao/p/4005810.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!