• HDU 1518 Square


    题意:给你n根棍子跟它的边长,要你能用这些棍子组一个正方形

    思路:回溯法

    能组正方形条件:

    1、棍子总长%4要等于0

    2、不能出现棍子的长度大于正方形的边长

    3、棍子数大于等于4

    直接用回溯肯定会超时,所以我们须要来优化空间了

    1、对于已使用的边,不能在它的子树中使用

    2、因为题目是推断能不能组正方形,所以仅仅要满足了条件,就直接结束!

    所以AC代码:

    #include <stdio.h>
    #include <string.h>
    int n,sum;
    int a[30],vis[30];
    int flag;
    void dfs(int bian,int l,int k)
    {
        int i;
        if(bian==5)
        {
            flag=1;
            return ;
        }
        if(l==sum)
        {
            dfs(bian+1,0,0);
            if(flag)
                return ;
        }
        for(i=k;i<n;i++)
        {
            if(!vis[i]&&l+a[i]<=sum)
            {
                vis[i]=1;
                dfs(bian,a[i]+l,i+1);
                if(flag)
                    return;
                vis[i]=0;
            }
        }
    }
    int main()
    {
        int t;
        scanf("%d",&t);
        while(t--)
        {
            int i;
            sum = 0;
            scanf("%d",&n);
            for(i=0;i<n;i++)
            {
                scanf("%d",&a[i]);
                sum+=a[i];
            }
            if(sum%4!=0)
            {
                printf("no
    ");
                continue;
            }
            sum=sum/4;
            for(i=0;i<n;i++)
            {
                if(a[i]>sum)
                    break;
            }
            if(i!=n)
            {
                printf("no
    ");
                continue;
            }
            memset(vis,0,sizeof(vis));
            flag=0;
            dfs(1,0,0);
            if(flag)
                printf("yes
    ");
            else
                printf("no
    ");
        }
    
        return 0;
    }
    


  • 相关阅读:
    Python内存管理机制
    哈希表(散列表)
    Python面向对象三大特性
    Python 面向对象继承
    Python面向对象 类的空间问题
    面向对象初识
    增量式爬虫
    分布式爬虫
    crawlscrapy框架
    HTML
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/4088710.html
Copyright © 2020-2023  润新知