D. Bicolorings
题解
n+1会发生什么?
答案可不可以用结尾的状态来定义?
可不可以用结尾的状态来转移?
code
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const ll mod=998244353;
ll dp[1005][2005][4]={0};
inline void read(ll &x) {
x = 0;
ll flag = 1;
char c = getchar();
while(c < '0' || c > '9'){
if(c == '-') flag = -1;
c = getchar();
}
while(c >= '0' && c <= '9') {
x = (x << 3) + (x << 1) + (c ^ 48);
c = getchar();
}
x *= flag;
}
inline void write(ll x)
{
if(x < 0){
putchar('-');
x = -x;
}
if(x > 9)
write(x / 10);
putchar(x % 10 + '0');
}
int main()
{
ll n, k;
read(n); read(k);
dp[1][1][0] = 1;
dp[1][1][3] = 1;
dp[1][2][1] = 1;
dp[1][2][2] = 1;
for(ll i = 2; i <= n; i++)
{
for(ll j = 1; j <= k; j++)
{
dp[i][j][0] = (dp[i-1][j][0] + dp[i-1][j][1] + dp[i-1][j][2] + dp[i-1][j-1][3]) % mod;
dp[i][j][1] = (dp[i-1][j-1][0] + dp[i-1][j][1] + dp[i-1][j-2][2] + dp[i-1][j-1][3]) % mod;
dp[i][j][2] = (dp[i-1][j-1][0] + dp[i-1][j-2][1] + dp[i-1][j][2] + dp[i-1][j-1][3]) % mod;
dp[i][j][3] = (dp[i-1][j-1][0] + dp[i-1][j][1] + dp[i-1][j][2] + dp[i-1][j][3]) % mod;
}
}
ll ans = 0;
for(ll i = 0; i < 4; i++) ans = (ans + dp[n][k][i]) % mod;
write(ans);
return 0;
}

浙公网安备 33010602011771号