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     
  • 相关阅读:
    FZU Problem 2150 Fire Game
    HTTP协议认识
    GitHub
    设计模式学习笔记(一)——面向对象设计模式与原则
    信息安全系统设计基础第九周学习总结
    信息安全系统设计基础第八周期中总结
    家庭作业二
    信息安全系统设计基础第七周学习总结
    家庭作业
    信息安全系统设计基础第六周学习总结
  • 原文地址:https://www.cnblogs.com/PegasusWang/p/3008942.html
Copyright © 2011-2022 走看看