zoukankan      html  css  js  c++  java
  • hdu 1518 Square(dfs)

    刚接触搜索,这一题直接看蒙了,上网查的解题报告,重新理一下思路。

    首先当所有木棒总长度不能被4整除时以及木棒最大长度大于总长度除以4时,不能组成正方形,直接输出no。

    深搜时从第一个开始往后搜索,只要满足当前边长+当前木棒长<正方形边长,就标记该木棒,并继续搜索后面的木棒,当木棒长度=sum/4 时,count加1,当count=3时表明能够成正方形,flag=1,返回,flag=0则不能组成正方形。

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 using namespace std;
     5 int a[30];
     6 bool visit[30], flag;
     7 int n, len;                                      //len边长
     8 void dfs(int curl, int pos, int count)    //curl当前边长,pos位置
     9 {
    10     if (curl == len)
    11     {
    12         ++count;
    13         if (count == 3)
    14         {
    15             flag = 1;
    16             return;
    17         }
    18         curl = pos = 0;
    19     }
    20     if (flag)
    21         return;
    22     for (int i = pos; i < n; ++i)
    23         if (!visit[i])
    24         {
    25             if (curl + a[i] <= len)
    26             {
    27                 visit[i] = 1;
    28                 dfs(curl + a[i], i, count);
    29                 visit[i] = 0;
    30             }
    31         }
    32 }
    33 int main()
    34 {
    35     int T;
    36     scanf("%d", &T);
    37     while (T--)
    38     {
    39         memset(a, 0, sizeof(a));
    40         memset(visit, 0, sizeof(visit));
    41         scanf("%d", &n);
    42         int max = 0, sum = 0;
    43         for (int i = 0; i < n; ++i)
    44         {
    45             scanf("%d", &a[i]);
    46             sum += a[i];
    47             if (a[i] > max)
    48                 max = a[i];
    49         }
    50         if (sum % 4 != 0 || max > sum / 4)
    51             printf("no\n");
    52         else
    53         {
    54             len = sum / 4;
    55             flag = 0;
    56             dfs(0, 0, 0);
    57             if (flag)
    58                 printf("yes\n");
    59             else
    60                 printf("no\n");
    61         }
    62     }
    63     system("pause");
    64     return 0;
    65 }
    66     
  • 相关阅读:
    Nginx优化
    Mysql日常操作
    YUM源
    MySQL5.7安装手册
    自律——可以让我们活的更高级
    javascript中with的用法
    js中所有函数的参数(按值和按引用)都是按值传递的,怎么理解?
    base64编码的图片在网页中显示
    form表单提交没有跨域问题,但ajax提交存在跨域问题
    移动端1px的适配问题
  • 原文地址:https://www.cnblogs.com/PegasusWang/p/3008942.html
Copyright © 2011-2022 走看看