#include<stdio.h>
#include<string.h>
int main()
{
__int64 f[100][100],i,j,n1,n2,a,b,t,temp,ans;
memset(f,0,sizeof(f));//dp[i][j]表示第i次进攻后我方得分j(不算上原来的分数a)时的最多方案数
f[1][1]=f[1][2]=f[1][3]=1;
for(i=1;i<=20;i++)
{//最多进攻20次,最多得分为60.
for(j=1;j<=60;j++)
{//兼容第i-1次(不可能存在一回合得0分),至少得1分,故j>1没等号
if(j>1)
f[i][j]+=f[i-1][j-1];
if(j>2)
f[i][j]+=f[i-1][j-2];
if(j>3)
f[i][j]+=f[i-1][j-3];
}
}
while(scanf("%I64d%I64d%I64d",&a,&b,&t)!=EOF)
{
n1=(t/15+1)/2;//我方进攻多少次
n2=t/15-n1;//对方进攻多少次
if(n1==0)
{
if(a>b)
printf("1\n");
else
printf("0\n");
continue;
}
temp=(b+n2-a)+1;//我方最少得分才会赢
if(temp<0)
temp=0;
ans=0;
for(i=temp;i<=n1*3;i++)
ans+=f[n1][i];
printf("%I64d\n",ans);
}
return 0;
}
hdu 4504 背包最优方案数
最新推荐文章于 2020-03-13 13:21:05 发布