HDU 4972 - A simple dynamic programming problem

Posted nicetomeetu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HDU 4972 - A simple dynamic programming problem相关的知识,希望对你有一定的参考价值。

题意:
  给出一场篮球赛每次得分后的分差,求最终这场比赛的比分有多少种
分析:
  因为知道了最终的分差,只需要考虑最终的得分之和有多少种,就能确定比分的种数
  只有分差 1-2 或 2-1 能使总分的增量为 1 或 3. 其他情况只有一种增量
  若 1-2 或 2-1 有 cnt 种,则最后比分之和有 cnt+1 种
  若分差为 0 则没有先后之分,否则答案乘 2
  

  考虑错误输入:
    相邻分数之差大于3
    相邻分数相等却不等于1

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cmath>
 4 using namespace std;
 5 const int N = 100005;
 6 int t, n;
 7 int a[N];
 8 int solve()
 9 {
10     int cnt = 1;
11     for (int i = 1; i <= n; i++)
12     {
13         if (abs(a[i]-a[i-1]) > 3) return 0;
14         if (a[i] == a[i-1] && a[i] != 1) return 0;
15         if (a[i] == 1 && a[i-1] == 2 || a[i] == 2 && a[i-1] == 1) cnt++;
16     }
17     if (a[n] == 0) return cnt;
18     else return cnt*2;
19 }
20 int main()
21 {
22     scanf("%d", &t);
23     for (int tt = 1; tt <= t; tt++)
24     {
25         scanf("%d", &n);
26         a[0] = 0;
27         for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
28         printf("Case #%d: %d\n", tt, solve());
29     }
30 } 

 

以上是关于HDU 4972 - A simple dynamic programming problem的主要内容,如果未能解决你的问题,请参考以下文章

HDU 5399Too Simple

HDU 1757 A Simple Math Problem

?HDU 5795 A Simple Nim(简单Nim)

A Simple Math Problem HDU - 5974

HDU-1851-A Simple Game

SDS(Simple Dynamic String)