hdu 4972 A simple dynamic programming problem (每次记录两队得分差值求结果数)

 

因为是每次投篮后记录两队得分的差值,所以两个队伍的总分是不断增加的,可以发现只有差值由1-->2或者2-->1的情况才可能产生产生两种总分和的结果如 0:2可以变成2:3和1:2  其他的情况都只能是一种 

 

郜大可的代码:

 1 #include<stdio.h>
 2 #include<string.h>
 3 #include<iostream>
 4 #include<algorithm>
 5 using namespace std;
 6 #define LL __int64
 7 #define Ma 100010
 8 int num[Ma];
 9 int main(){
10     int t,cas=1;
11     scanf("%d",&t);
12     while(t--){
13         int n,ans=2;
14         scanf("%d",&n);
15         for(int i=0;i<n;i++)
16             scanf("%d",&num[i]);
17         if(num[0]>3||num[0]==0){
18             ans=0;
19             goto sss;
20         }
21         for(int i=1;i<n;i++){
22             int k=abs(num[i]-num[i-1]);
23             if(k>3||(num[i]!=1&&num[i-1]==num[i])){
24                 ans=0;
25                 goto sss;
26             }
27             if((num[i-1]==1&&num[i]==2)||(num[i-1]==2&&num[i]==1)){
28                 ans+=2;
29             }
30         }
31         if(num[n-1]==0) ans/=2;
32         sss:printf("Case #%d: %d\n",cas++,ans);
33     }
34     return 0;
35 }
36 
37 
38 [ Copy to Clipboard ]    [ Save to File]

 

posted @ 2014-08-22 20:54  galaxy77  阅读(168)  评论(0编辑  收藏  举报