标签:tput data 记忆化 生物 style 技术 转移 name sum
引理一:一个抖动序列的连续子序列(≈一个数列的子串?)仍然是抖动序列。引理二:若一个抖动排列中$x$与$x+1$不相邻,那么交换$x,x+1$ 序列仍满足抖动。引理三:若使一个抖动排列中大于等于$x$的元素全部$+1$,序列仍满足抖动。引理四:一个$[1,x]$的抖动序列一定可以对应到$[y-x+1,y]$的一个抖动序列。
(因为博主不会了所以就……)
转移方程$f[i][j]=f[i][j-1]+f[i-1][i-j+1]$
特判n=1!
思维量和代码量的反差简直……
或许神题都是这样的吧?
#include<cstdio> #include<iostream> #include<cstring> using namespace std; const int N=4500; int n,p,f[3][N],ans; int main() { scanf("%d%d",&n,&p); if(n==1) { cout<<1%p<<endl; return 0; } f[0][2]=1;int now=0; for(int i=3;i<=n;i++) { now=i&1; for(int j=2;j<=i;j++) f[now][j]=(f[now][j-1]+f[now^1][i-j+1])%p; } for(int i=1;i<=n;i++) (ans+=f[now][i])%=p; cout<<ans*2%p<<endl; return 0; }
标签:tput data 记忆化 生物 style 技术 转移 name sum
原文地址:https://www.cnblogs.com/Rorschach-XR/p/11110512.html