有三种卡牌,记为A,B,C类型。每轮,小x可以选择的出牌方法有:
-
打出一张A牌;
-
打出一张B牌;
-
打出一张A牌和一张C牌;
-
打出两张B牌和三张C牌。
问小x有多少种方法出完所有的牌。只要有一轮出牌的方法不一样,就算作不同的方法。
输入格式
一行,三个整数a,b,c,依次表示卡牌A,B,C的数量。1 ≤ a,b,c ≤ 15
输出格式
你的答案除以1 000 000 007的余数。
输入/输出例子1
输入:
2 2 3
输出:
3
样例解释
无
代码:
#include<bits/stdc++.h>
using namespace std;
int a,b,c;
int f[55][55][55];
const int mod=1000000007;
int main(){
cin>>a>>b>>c;
f[0][0][0]=1;
for(int i=0;i<=a;i++){
for(int j=0;j<=b;j++){
for(int k=0;k<=c;k++){ //枚举A,B,C卡牌的数量
if(i>=1){f[i][j][k]+=f[i-1][j][k];f[i][j][k]%=mod;} //DP,记得特判,不然会越界。下同。
if(j>=1){f[i][j][k]+=f[i][j-1][k]%mod;f[i][j][k]%=mod;}
if(i>=1 && k>=1){f[i][j][k]+=f[i-1][j][k-1]%mod;f[i][j][k]%=mod;}
if(j>=2 && k>=3){f[i][j][k]+=f[i][j-2][k-3]%mod;f[i][j][k]%=mod;}
}
}
}
cout<<f[a][b][c]%mod<<endl;
return 0;
}