这好难 传送门 :
思路我们定义思维状态表示 : f [ i ] [ j ] [ k 1 ] [ k 2 ] f[i][j][k1][k2] f[i][j][k1][k2] 表示前 i i i个A军队 和前 j j j个 B B B军队中,有 k 1 k1 k1个连续的A和 K 2 K2 K2个
连续的B的方案数
显然,对于k1,k2 必然是有一个为 0
因此状态转移如下 :
f [ i ] [ j ] [ 1 ] [ 0 ] + = f [ i ] [ j − 1 ] [ 0 ] [ k ] f[i][j][1][0] +=f[i][j-1][0][k] f[i][j][1][0]+=f[i][j−1][0][k] f [ i ] [ j ] [ 0 ] [ 1 ] + = f [ i − 1 ] [ j ] [ k ] [ 0 ] f[i][j][0][1]+=f[i-1][j][k][0] f[i][j][0][1]+=f[i−1][j][k][0] f [ i ] [ j ] [ 0 ] [ k ] + = f [ i − 1 ] [ j ] [ 0 ] [ k − 1 ] f[i][j][0][k]+=f[i-1][j][0][k-1] f[i][j][0][k]+=f[i−1][j][0][k−1] f [ i ] [ j ] [ k ] [ 0 ] + = f [ i ] [ j − 1 ] [ k − 1 ] [ 0 ] f[i][j][k][0]+=f[i][j-1][k-1][0] f[i][j][k][0]+=f[i][j−1][k−1][0]
CODEconst int N = 110,K = 15;
const int MOD = 1e8;
int f[N][N][K][K];
int n,m,k1,k2;
int mx(int x)
{
if(x>n>>m>>k1>>k2;
f[0][0][0][0] = 1;
for(int i=0;i
关注
打赏