做了一下 ABC237-F
用的方法是 dp
我设的状态是 f[i][j][k] 代表枚举到第 i 位,第 i 位元素为 j,连续上升了 k 个元素。
由于本人过蒻,连样例都过不去,我想问一下是不是我的转移有问题,或者是我的状态设错了
代码:
#include <bits/stdc++.h>
using namespace std;
namespace Main
{
const int mod=998244353;
const int maxn=1005;
int f[maxn][11][4];
/*
枚举到第i个元素,当前位为为j,
连选k个上升
*/
int n,m;
void main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
f[i][j][1]=1;
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{//j代表这一位的数
for(int k=1;k<=m;k++)
{//k代表上一位的数
for(int x=1;x<=3;x++)
{//到上一位连续递增量
if(j>k)
{
if(x<3)
{
f[i][j][x+1]+=f[i-1][k][x];
f[i][j][x+1]%=mod;
}
}
else
{
f[i][j][1]+=f[i-1][k][x];
f[i][j][1]%=mod;
}
}
}
}
}
int ans=0;
for(int i=1;i<=m;i++)
{
for(int j=1;j<=3;j++)
{
ans+=f[n][i][j];
ans%=mod;
}
}
printf("%d",ans);
#ifndef ONLINE_JUDGE
system("pause");
#endif
}
}
int main()
{
Main::main();
return 0;
}