zoukankan      html  css  js  c++  java
  • BestCoder22 1002.NPY and arithmetic progression(hdu 5143) 解题报告

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5143

    题目意思:给出 1, 2, 3, 4 的数量,分别为a1, a2, a3, a4,问是否在每个数只使用一次的前提下,分成若干部分,每部分数的长度 >= 3且满足是等差数列。可以的话输出 Yes ,否则 No 。

      比赛的时候过了pretest,那个开心啊~~然后跟 XX 兽讨论了之后,才发现自己理解错了题目= =

      要用到深搜,问组合嘛~~组合就是有可能是(1, 2, 3, 4)、(1, 2, 3)、(2, 3, 4) 与 cnt[1] >= 3 || cnt[1] == 0 { (1, 1, 1), (0)}  ,cnt[2] >= 3 || cnt[2] == 0,cnt[3] >= 3 || cnt[3] == 0, cnt[4] >= 3 || cnt[4] == 0 的组合。

      cnt[i] 表示数字 i 的数量有cnt[i]个。其实总共有16种情况。

      0 0 0 0,  0 0 0 3,  0 0 3 0,  0 0 3 3

      0 3 0 0,  0 3 0 3,  0 3 3 0,  0 3 3 3

      3 0 0 0,  3 0 0 3,  3 0 3 0,  3 0 3 3

      3 3 0 0,  3 3 0 3,  3 3 3 0,  3 3 3 3 

      注意:填 3 的那些位置实际上 >= 3 都符合条件的。然后跟(1, 2, 3, 4)、(1, 2, 3)、(2, 3, 4) 组合

      

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstdlib>
     4 #include <cstring>
     5 using namespace std;
     6 
     7 bool dfs(int a, int b, int c, int d)
     8 {
     9     if ((a >= 3 || !a) && (b >= 3 || !b) &&  (c >= 3 || !c) && (d >= 3 || !d))// (1,1,1),(2,2,2), (3,3,3), (4,4,4) 的组合
    10         return true;
    11     if (a >= 1 && b >= 1 && c >= 1 && d >= 1)  // (1, 2, 3, 4)
    12     {
    13         if (dfs(a-1, b-1, c-1, d-1))
    14             return true;
    15     }
    16     if (a >= 1 && b >= 1 && c >= 1)    // (1, 2, 3)
    17     {
    18         if (dfs(a-1, b-1, c-1, d))
    19             return true;
    20     }
    21     if (b >= 1 && c >= 1 && d >= 1)    // (2, 3, 4)
    22     {
    23         if (dfs(a, b-1, c-1, d-1))
    24             return true;
    25     }
    26     return false;
    27 }
    28 
    29 int main()
    30 {
    31     #ifndef ONLINE_JUDGE
    32         freopen("in.txt", "r", stdin);
    33     #endif // ONLINE_JUDGE
    34     int T, ta, tb, tc, td;
    35     while (scanf("%d", &T) != EOF)
    36     {
    37         while (T--)
    38         {
    39             scanf("%d%d%d%d", &ta, &tb, &tc, &td);
    40             printf("%s
    ", dfs(ta, tb, tc, td) ? "Yes" : "No");
    41         }
    42         return 0;
    43     }
    44 }
  • 相关阅读:
    学习:多项式算法----FWT
    学习:多项式算法----FFT
    学习:STL----优先队列
    Python中pip安装包出现Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection
    ELK集群redis服务因数据量太大导致内存使用率暴涨故障修复
    zabbix 历史数据存入elasticsearch
    elk+filebeat+redis日志系统部署
    Linux 服务守护脚本
    Nginx 配置临时维护页
    Linux DDos防御
  • 原文地址:https://www.cnblogs.com/windysai/p/4168090.html
Copyright © 2011-2022 走看看