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 }
  • 相关阅读:
    序列JSON数据和四种AJAX操作方式
    jquery.validate和jquery.form.js实现表单提交
    JQuery Validate使用总结1:
    HOWTO: Include Base64 Encoded Binary Image Data (data URI scheme) in Inline Cascading Style Sheets (CSS)(转)
    SharePoint 2007 使用4.0 .Net
    动态IP解决方案
    取MS CRM表单的URL
    从Iframe或新开的窗口访问MS CRM 2011(转)
    Toggle or Hidden MS CRM Tab
    Windows 2008下修改域用户密码
  • 原文地址:https://www.cnblogs.com/windysai/p/4168090.html
Copyright © 2011-2022 走看看