[ABC237-F]站外题求助
  • 板块题目总版
  • 楼主__vector__
  • 当前回复3
  • 已保存回复3
  • 发布时间2022/4/5 22:33
  • 上次更新2023/10/28 04:29:18
查看原帖
[ABC237-F]站外题求助
507348
__vector__楼主2022/4/5 22:33

做了一下 ABC237-F
用的方法是 dp
我设的状态是 f[i][j][k] 代表枚举到第 ii 位,第 ii 位元素为 jj,连续上升了 kk 个元素。
由于本人过蒻,连样例都过不去,我想问一下是不是我的转移有问题,或者是我的状态设错了

代码:

#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;
}
2022/4/5 22:33
加载中...