hdu 4504(威威猫系列故事——篮球梦,需注意一组模糊的数据)
*************
90 88 0
答案以为:1;
容易输出0(与状态的存储有关)
状态转移为
//d[i][j]表示前i回合获得j分的方法数
d[i][j]=d[i-1][j-1]+d[i-1][j-2]+d[i-1][j-3]
#include<stdio.h> #include<string.h> long long dp[31][93]; int Dp() { memset(dp,0,sizeof(dp)); dp[1][1]=1; dp[1][2]=1; dp[1][3]=1; for(int i=2;i<21;i++) for(int j=1;j<63;j++) { if(j>1)dp[i][j]=dp[i-1][j-1]; //第i场的得分状态等于第i-1场得dp[i-1][j-1]分状态 if(j>2)dp[i][j]+=dp[i-1][j-2]; if(j>3)dp[i][j]+=dp[i-1][j-3]; //printf("%I64d ",dp[i][j]); } return 0; } int main() { int A,B,t,na,nb,df,n; long long ans; Dp(); while(scanf("%d %d %d",&A,&B,&t)!=EOF) { n=t/15; nb=n/2; na=n-nb; df=B+nb-A; if(df<0) { if(n==0){printf("1\n");continue;} else df=0; } ans=0; for(int i=df+1;i<93;i++)ans+=dp[na][i]; printf("%I64d\n",ans); } return 0; }