HDU威威猫シリーズの物語——バスケットボールの夢

5641 ワード

威威の猫のシリーズのストーリ——バスケットボールの夢
Time Limit: 300/100 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Total Submission(s): 774    Accepted Submission(s): 200
Problem Description
威威猫はバスケットボールの試合に夢中になって、忠実なNBAのファンで、彼はいつも自分の太った体もスマッシュを飛ばすことができると幻想しています.また、彼はバスケットボールのコーチの仕事に対しても独鐘を持っていて、特に試合の戦術に対して、シュートの選択の方面もとても研究があって、以下は威威猫が研究した1つの問題です:NBAのバスケットボールの試合は全部で48分で、もし私たちが今すでに現在のスコアA:Bを知っていたら、Aは当方のスコアを代表して、Bは相手のスコアを代表して、今試合はまだt秒の時間が残っています.私たちは簡単に双方がそれぞれ1回攻撃する時間を15秒(15秒未満では攻撃が得点しない)に固定し、交互に攻撃するために、つまり当方が1回攻撃し、次に相手が攻撃し、順番に循環すると考えています.攻撃には3つの選択肢がある:(ここでは命中率を考慮しない)1、反則を作り、(いずれも2罰1中を仮定する)1点を得る;2、中距離シュートで2点を取る.3、3点シュートで3点を取る.問題を簡略化するために、相手のラウンドでは、当方の守備が良いため、相手に1点しか得られず、固定されていると仮定します.つまり、相手の攻撃ラウンドは1ラウンドごとに1点を得ることになります.今試合は最後の瀬戸際に入って、次の最初のラウンドは当方の攻撃で、今威威猫は監督がどれだけの異なる選択で当方が試合に勝つことができるかを知りたいと思っています(命中率を考慮しないという意味かもしれません).
 
Input
複数のデータが入力されている(250グループを超えない).各セットのデータは、3つの整数A、Bおよびtを含み、AおよびBは現在のスコア(0<=A、B<=200)を表し、tは、残りの時間(単位秒0<=t<=600)を表す.
 
Output
実行可能なスキーマ数を出力してください.データのセットごとに1行を占めます.
 
Sample Input
88 90 50
 
Sample Output
6
Hint
サンプル解析:現在のスコアは88:90で、残り50秒で相手が一番多い攻撃チャンス(最後の5秒の攻撃は成功しない)があります.こちらは2回あります.相手の最終得点は91で、こちらは少なくとも2ラウンドで4点を取ってから勝つことができます.だから、すべての方案数は6種類です.つまり、第一球第二球1 3 3 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3
 
Source
2013テンセントプログラミングマラソン初戦〇場(3月20日)
 
Recommend
liuyiding
 
 
#include<iostream>
#include<cstdio>
#include<cstring>

using namespace std;

int a,b,t;
long long dp[25][620];

int main(){

    //freopen("input.txt","r",stdin);

    while(~scanf("%d%d%d",&a,&b,&t)){
        int n=(t/15+1)/2;
        memset(dp,0,sizeof(dp));
        //dp[1][1]=1; dp[1][2]=1; dp[1][3]=1;
        dp[0][0]=1; //dp[i][j]    i  j     ,  0  0      1
        for(int i=1;i<=n;i++)
            for(int j=i-1;j<=3*(i-1);j++)
                if(dp[i-1][j]){
                    dp[i][j+1]+=dp[i-1][j];
                    dp[i][j+2]+=dp[i-1][j];
                    dp[i][j+3]+=dp[i-1][j];
                }
        long long ans=0;
        //dp[0][0]=1;
        for(int i=max(n,b-a+t/15-n+1);i<=n*3;i++)
            ans+=dp[n][i];
        printf("%I64d
",ans); } return 0; }