b_lq_摆动序列(枚举前一个数的所有状态)

一个序列的奇数项都比前一项大,偶数项都比前一项小,则称为一个摆动序列。
求长度为 m,每个数都是 1 到 n 之间的正整数的摆动序列一共有多少个。
对于所有评测用例,\(1 <= n, m <= 1000\)

#include<bits/stdc++.h>
using namespace std;
const int N=1005, mod=10000;
int n,m,f[N][N];    //f[i][j]表示选到第i个数时选数字j的方案数
int main() {
    cin>>m>>n; for (int j=1; j<=n; j++) f[1][j]=1;
    for (int i=2; i<=m; i++)
    for (int j=1; j<=n; j++) {
        int& t=f[i][j];
        if (i&1) for (int k=j+1; k<=n; k++) t=(t+f[i-1][k])%mod;
        else     for (int k=1; k<j; k++)    t=(t+f[i-1][k])%mod;
    }
    int ans=0;
    for (int j=1; j<=n; j++) ans=(ans+f[m][j])%mod;
    cout<<ans;
    return 0;
}

超时...

posted @ 2020-10-08 14:35  童年の波鞋  阅读(142)  评论(0编辑  收藏  举报