zoukankan      html  css  js  c++  java
  • HDU-1518-Square

    题目链接 

    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 ");
    continue;
    }
    l=sum/4;
    for(i=0;i<m;i++)
    {
    if(s[i]>l)
    {
    printf("no ");
    break;
    }
    }
    if(i<m)
    continue;
    memset(visit,0,sizeof(visit));
    dfs(1,0,0);
    if(success)
    printf("yes ");
    else
    printf("no ");
    }
    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;
    }
    }
    }

  • 相关阅读:
    tool公用工具方法
    angular5.x 拦截器 switchMap
    angular5.x拦截器 给get post请求添加参数user_token
    flex布局 阮一峰
    json.stringify()和json.parse()
    年份月数天数
    打印字母塔
    打印形状
    打印九九乘法表
    C语言猜数字游戏
  • 原文地址:https://www.cnblogs.com/liudehao/p/4005810.html
Copyright © 2011-2022 走看看