一个序列的奇数项都比前一项大,偶数项都比前一项小,则称为一个摆动序列。
求长度为 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;
}
超时...