Problem Description威威猫十分迷恋篮球比赛,是忠实的NBA球迷,他常常幻想自己那肥硕的身躯也能飞起扣篮。另外,他对篮球教练工作也情有独钟,特别是对比赛的战术,投篮选择方面也是很有研究,下面就是威威猫研究过的一个问题: 一场NBA篮球比赛总共48分钟,假如我们现在已经知道当前比分 A:B,A代表我方的比分,B代表对方的比分,现在比赛还剩下t秒时间。我们简单的认为双方各自进攻一次的时间皆固定为15秒(不到15秒则进攻不得分),且为交替进攻,即我方进攻一次,接着对方进攻,依次循环。 进攻有三种选择方式:(这里不考虑命中率) 1、造犯规,(假设都两罚一中)得1分; 2、中距离投篮 得2分; 3、三分球 得3分。 为了简化问题,假设在对方回合,由于我方防守比较好,只让对手得1分,且为固定,即对方的进攻回合就为每回合得1分。现在比赛进入最后关头,接下来第一个回合是我方进攻,现在威威猫想要知道教练有多少种不同的选择能使我方可能赢得比赛(可能的意思就是不考虑命中率的情况)。
Input输入有多组数据(不超过250组); 每组数据包含3个整数A,B和t,其中A和B 表示当前的比分(0 <= A, B <= 200),t表示还剩多少时间(单位秒 0 <= t <= 600)。
Output请输出可行的方案数,每组数据输出占一行。
Sample Input88 90 50
Sample Output6
#include<algorithm> #include<cstring> #include<cstdio> using namespace std; __int64 Dp[330][1100]; int main() { __int64 i, j, k, t; __int64 A, B, T; memset( Dp, 0, sizeof( Dp ) ); Dp[0][0]=1; //( 坑死我了 T T ) Dp[1][1]=1;Dp[1][2]=1;Dp[1][3]=1; for( i=2;i<=50;i++ ) { for( j=i;j<=100;j++ ) if( j==2 ) Dp[i][j]=Dp[i-1][j-1]+Dp[i-1][j-2]; else Dp[i][j]=Dp[i-1][j-1]+Dp[i-1][j-2]+Dp[i-1][j-3]; } while( scanf( "%I64d%I64d%I64d",&A,&B,&T )!=-1 ) { __int64 temp,Count,wo,Sum; Sum=0; temp=T/15; if( temp%2 ) Count=temp/2+1; else Count=temp/2; wo=B-A+1+temp-Count; if( wo<Count ) wo=Count; for( i=wo;i<=Count*3;i++ ) Sum+=Dp[Count][i]; printf( "%I64d\n",Sum ); } return 0; }
《《《《《《《《《排列组合》》》》》》》》#include<algorithm> #include<cstring> #include<cstdio> using namespace std; __int64 a[21]; int main() { __int64 i, j, k, t; __int64 A, B, T; a[0]=1; a[1]=1; for( i=2;i<=20;i++ ) a[i]=a[i-1]*i; while( scanf( "%I64d%I64d%I64d",&A,&B,&T )!=-1 ) { __int64 temp,Count,Sum; Sum=0; temp=T/15; Count=( temp+1 )/2; for( i=0;i<=Count;i++ ) { for( j=0;j+i<=Count;j++ ) // j+i<=Count { k=Count-i-j; if( i+j*2+k*3+A>B+temp-Count ) //i个1 j个2 k个3 Sum+=a[Count]/a[i]/a[j]/a[k]; } } printf( "%I64d\n",Sum ); } return 0; }
hdu 4504 威威猫系列故事——篮球梦 Dp
最新推荐文章于 2016-11-06 14:58:46 发布