求1~n组成一个抖动序列的方案数

首先这种序列有一些非常妙妙但我发现不了的性质

1.对于一个抖动序列,如果i和i+1不相邻,则交换i和i+1,他还是个抖动序列

2.对于一个抖动序列,我把每个数拿n+1减一下(上下翻转),他还是个抖动序列,只不过波峰和波谷换了一下

3.对于一个抖动序列,我把它左右翻转,他还是个抖动序列

于是设f[i][j]是i个数中,排名为j的数在第一个位置、且它是波峰的方案数

那么答案就是$2\sum{f[N][i]}$(我把它翻一下不就有所有的第一个数作为波谷的情况了嘛)

然后有方程$f[i][j]=f[i][j-1]+f[i-1][j-1]$

考虑两种情况:

  1.j和j-1不相邻,由性质1这种情况的f[i][j]就是f[i][j-1]

  2.j和j-1相邻,也就是j-1在第二个位置,这种情况的f[i][j]就是f[i-1][j-1],就是不看j,然后把剩下的i-1个数拎出来,那j-1的排名还是j-1

合起来就是上面的方程

 1 #pragma GCC optimize(3)
 2 #include<bits/stdc++.h>
 3 #define pa pair<ll,ll>
 4 #define CLR(a,x) memset(a,x,sizeof(a))
 5 using namespace std;
 6 typedef long long ll;
 7 const int maxn=4205;
 8
 9 inline char gc(){
10     return getchar();
11     static const int maxs=1<<16;static char buf[maxs],*p1=buf,*p2=buf;
12     return p1==p2&&(p2=(p1=buf)+fread(buf,1,maxs,stdin),p1==p2)?EOF:*p1++;
13 }
14 inline ll rd(){
15     ll x=0;char c=gc();bool neg=0;
16     while(c<'0'||c>'9'){if(c=='-') neg=1;c=gc();}
17     while(c>='0'&&c<='9') x=(x<<1)+(x<<3)+c-'0',c=gc();
18     return neg?(~x+1):x;
19 }
20
21 int N,f[2][maxn],P;
22
23 int main(){
24     //freopen("","r",stdin);
25     int i,j,k;
26     N=rd(),P=rd();
27     f[1][1]=1;
28     for(i=2;i<=N;i++){
29         for(j=1;j<=i;j++){
30             f[i&1][j]=(f[i&1][j-1]+f[!(i&1)][i-j+1])%P;
31         }
32     }
33     int ans=0;
34     for(i=1;i<=N;i++)
35         ans+=f[N&1][i],ans%=P;
36     printf("%d\n",ans*2%P);
37     return 0;
38 }

转载于:https://www.cnblogs.com/Ressed/p/9935020.html

luogu2467/bzoj1925 地精部落 (dp)相关推荐

  1. Luogu2467 SDOI2010 地精部落 DP

    传送门 一个与相对大小关系相关的$DP$ 设$f_{i,j,0/1}$表示放了$i$个,其中最后一个数字在$i$个中是第$j$大,且最后一个是极大值($1$)或极小值时($0$)的方案数.转移: $$ ...

  2. [luogu2467 SDOI2010] 地精部落

    [luogu2467 SDOI2010] 地精部落 题目描述 传说很久以前,大地上居住着一种神秘的生物:地精. 地精喜欢住在连绵不绝的山脉中.具体地说,一座长度为N的山脉H可分为从左到右的N段,每段有 ...

  3. [BZOJ1925]地精部落

    地精部落 题目描述 传说很久以前,大地上居住着一种神秘的生物:地精.地精喜欢住在连绵不绝的山脉中.具体地说,一座长度为N的山脉H可分为从左到右的N段,每段有一个独一无二的高度Hi,其中Hi是1到N之间 ...

  4. bzoj1925: [Sdoi2010]地精部落 [dp]

    Description 传说很久以前,大地上居住着一种神秘的生物:地精. 地精喜欢住在连绵不绝的山脉中.具体地说,一座长度为 N 的山脉 H可分 为从左到右的 N 段,每段有一个独一无二的高度 Hi, ...

  5. [BZOJ1925][SDOI2010]地精部落(DP)

    题意 传说很久以前,大地上居住着一种神秘的生物:地精. 地精喜欢住在连绵不绝的山脉中.具体地说,一座长度为 N 的山脉 H可分 为从左到右的 N 段,每段有一个独一无二的高度 Hi,其中Hi是1到N ...

  6. BZOJ 1925 地精部落 DP

    Description 传说很久以前,大地上居住着一种神秘的生物:地精. 地精喜欢住在连绵不绝的山脉中.具体地说,一座长度为 N 的山脉 H可分 为从左到右的 N 段,每段有一个独一无二的高度 Hi, ...

  7. bzoj1925地精部落——数学

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1925 真是精妙的递推式...好难想到啊: 详见这位的博客:https://www.cnblo ...

  8. BZOJ1925: [Sdoi2010]地精部落

    BZOJ1925: [Sdoi2010]地精部落 Description 传说很久以前,大地上居住着一种神秘的生物:地精. 地精喜欢住在连绵不绝的山脉中. 具体地说,一座长度为 N 的山脉 H可分 为 ...

  9. bzoj1925【sdoi2010】地精部落

    1925: [Sdoi2010]地精部落 Time Limit: 10 Sec   Memory Limit: 64 MB Submit: 797   Solved: 487 [ Submit][ S ...

最新文章

  1. MySQL中购买的语句,mysql操作语句 - 买灰机自己开的个人空间 - OSCHINA - 中文开源技术交流社区...
  2. boost::mpl::divides相关的测试程序
  3. 崩坏3日记:戴尔超限专武天天出,我们的快乐变为刷题式重复养成
  4. 用Java访问带有Kerberos认证的HBase
  5. WordCount--统计输入文件的字符数、行数、单词数(java)--初级功能
  6. 第十二届蓝桥杯A组省赛填空题Java思路及代码合集(相乘直线货物摆放路径回路计数)
  7. 前端学习(2637):this
  8. (acm)C++加速输入的几种方法
  9. Maven多模块项目搭建
  10. 如何在 Linux 中挂载 ISO 文件
  11. redis 学习笔记三
  12. 清理电脑文件夹中的Thumbs.db文件
  13. 关于这个blog使用的问题?
  14. html-box-sizing
  15. awb入门(2).色彩恒常
  16. HTTPS安全通讯 6. 安卓 使用BKS实现SSL/TLS安全协议
  17. SDN南向接口和北向接口区别
  18. Python9-前端基础知识-day47
  19. LeetCode——剑指 Offer 38. 字符串的排列
  20. 有效监控的 10 条基本原则

热门文章

  1. jquery lt选择器与gt选择器
  2. Windows 技术篇 - 退出s模式解决surface无法安装和使用第三方应用问题:于安全和性能的考虑,此Windows模式只运行经Microsoft验证的应用
  3. 4.1 matlab二维曲线绘图方法
  4. 字符流中第一个不重复的字符
  5. Python进阶07 函数对象
  6. Matlab C混合编程
  7. opencv图像边界的填充
  8. 打开和保存文件的对话框
  9. html文件上传协议,HTTP 上传文件的协议格式
  10. php与mysql同步_php实现mysql同步的实现方法