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 1757 A Simple Math Problem