直接DP求组合数即可。
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#define LL __int64
using namespace std;
LL dp[21][70];
void Init(){
memset(dp,0,sizeof(dp));
dp[0][0]=1ll;
for(int i=1;i<21;i++){
for(int j=1;j<70;j++){
if(j-1>=0) dp[i][j]+=dp[i-1][j-1];
if(j-2>=0) dp[i][j]+=dp[i-1][j-2];
if(j-3>=0) dp[i][j]+=dp[i-1][j-3];
}
}
// int ans=0;
// for(int i=0;i<70;i++)
// ans+=dp[20][i];
// printf("%d
",ans);
}
int main(){
Init();
int a,b,t;
while(scanf("%d%d%d",&a,&b,&t)!=EOF){
t=t/15;
b+=(t/2);
LL ans=0;
if(b<a){
t=t-t/2;
for(int i=0;i<70;i++)
ans+=dp[t][i];
}
else{
int g=b-a;
// cout<<g<<endl;
t=t-t/2;
// cout<<t<<endl;
for(int i=g+1;i<70;i++)
ans+=dp[t][i];
}
printf("%I64d
",ans);
}
return 0;
}