P2467 [SDOI2010]地精部落

题意:

有n个山脉高度分别是1到n,现在让你按照山峰山谷的顺序依次摆放(第一个可以是山峰也可以是山谷),问有多少方案(答案mod p)

题解:

dp,但是自己推不出来
这个博客讲的非常详细,方案也非常多
我就先将第一个方案:
我们先去看这个波动序列有什么性质?

  1. 在一个波动序列中,如果i-1与i不相邻,交换i-1与i即可得到一个新的波动序列
  2. 把长度为n的一个波动序列中的数字ai变成(n+1)-ai,会得到一个新的波动序列,且新波动序列的山峰和山谷与原序列相反

我们根据这两个性质开始推状态与转移
设dp[i][j]表示由i个数(1~i)组成,且第一个数是j,且j为山峰(即第一个会大于第二个)的波动序列数
我们现在考虑哪些会给dp[i][j]做贡献
如果j-1与j不相邻,由性质1可知,交换j-1和j会得到新的序列,这些序列就是以j−1开头的所有波动序列,且这些序列与交换前的序列一一对应,所以有贡献dp[i][j-1]表示以j开头的一些波动序列可以由以j−1开头的波动序列转移过来
如果j-1与j相邻,我们既然规定了j是山峰,那么j-1就是山谷。此时我们考虑性质2的贡献,对于i个数组成序列,第一位是j,还有i-1位的长度未确定,那么长度为i-1,以j-1开头,且j-1为山谷的序列会贡献答案,但是我们这一直统计山峰哪来山谷?山谷相反就是山峰,所以以(i-1+1)-(j-1)即i-j+1开头且i-j+1为山峰的序列数相同,所以再加上一个dp[i-1][i-j+1]
所以有dp[i][j]=dp[i][j−1]+dp[i−1][i−j+1]dp[i][j]=dp[i][j-1]+dp[i-1][i-j+1]dp[i][j]=dp[i][j−1]+dp[i−1][i−j+1]
最后答案是2∗∑i=2ndp[n][i]2*\sum_{i=2}^{n}dp[n][i]2∗∑i=2n​dp[n][i](以1开头构不成波动序列,因为我们规定了第一个是山峰,如果1开头无法是山峰,但是以1开头的情况也会被计算其中,所以不用担心漏了)

代码:

#include<bits/stdc++.h>
#define debug(a,b) printf("%s = %d\n",a,b);
using namespace std;
typedef long long ll;
typedef pair<int, int> PII;
clock_t startTime, endTime;
//Fe~Jozky
const ll INF_ll=1e18;
const int INF_int=0x3f3f3f3f;
inline ll read(){ll s=0,w=1ll;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')w=-1ll;ch=getchar();}while(ch>='0'&&ch<='9') s=s*10ll+((ch-'0')*1ll),ch=getchar();//s=(s<<3)+(s<<1)+(ch^48);return s*w;
}
void rd_test(){#ifdef ONLINE_JUDGE#elsestartTime = clock(); //计时开始freopen("in.txt","r",stdin);#endif
}
void Time_test(){#ifdef ONLINE_JUDGE#elseendTime = clock(); //计时结束printf("\n运行时间为:%lfs\n",(double)(endTime - startTime) / CLOCKS_PER_SEC);#endif
}
ll f[2][5000];
int main()
{//rd_test();int n;ll p;cin>>n>>p;f[0][2]=1;for(int i=3;i<=n;i++){for(int j=2;j<=i;j++){f[i&1][j]=(f[i&1][j-1]+f[(i-1)&1][i-j+1])%p;}}int sum=0;for(int i=2;i<=n;i++)sum=(sum+f[n&1][i])%p;printf("%d\n",(sum<<1)%p); return 0;//Time_test();
}

P2467 [SDOI2010]地精部落相关推荐

  1. P2467 [SDOI2010]地精部落(dp n个数此起彼伏)

    原题: https://www.luogu.org/problemnew/show/P2467 题意: 1~n这n个数的排列,要求"此起彼伏",问方案数%P 解析: 发现自己已经独 ...

  2. BZOJ1925: [Sdoi2010]地精部落

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

  3. DP [Sdoi2010]地精部落

    问题 H: [Sdoi2010]地精部落 时间限制: 1 Sec 内存限制: 64 MB 题目描述 传说很久以前,大地上居住着一种神秘的生物:地精. 地精喜欢住在连绵不绝的山脉中.具体地说,一座长度为 ...

  4. 1925: [Sdoi2010]地精部落

    1925: [Sdoi2010]地精部落 Time Limit: 10 Sec   Memory Limit: 64 MB Submit: 1196   Solved: 730 [ Submit][ ...

  5. [luogu2467 SDOI2010] 地精部落

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

  6. [Sdoi2010] 地精部落

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

  7. SDOI2010 地精部落

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

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

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

  9. BZOJ1925 [Sdoi2010]地精部落 【dp】

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

最新文章

  1. matlab条件判断配合输出
  2. idea2019配置gradle详解_Constraint Layout 2.0 用法详解
  3. 全国青少年信息学奥林匹克联赛
  4. CentOS基础操作指令(磁盘分区和挂载)
  5. 实战深度强化学习DQN-理论和实践
  6. 计算机组成的ir是指,2002.10计算机组成原理§1控制器的基本概念⑵指令寄存器IR指令.ppt...
  7. excel小写转大写公式_喂!这边居然有演示的Excel快捷键!
  8. 高项近5套选择题知识点思维导图
  9. 希望大家推荐一个javaweb开源框架
  10. java chars_为什么在Java 8中String.chars()是一个整数流?
  11. 图纸管理软件_企业图纸文档的安全管理与使用,是否遇到这些图纸管理问题?...
  12. 基于SSM实现后勤报修系统
  13. 股票软件c++源代码
  14. 线性(欧拉)筛法筛素数表
  15. linux下启动tlq命令,tlq tonglink/q 常用管理方法
  16. aplay 源码分析
  17. [渝粤教育] 四川大学 新生研讨课 参考 资料
  18. php网易云随机音乐api源码开源,网易云音乐随机歌曲
  19. mysql 减去一月_sql – 如何从日期列中减去一个月
  20. 北鲲云联合珠海中科先进技术研究院推出代算服务

热门文章

  1. 雨雪出行伴侣,优质PVC时尚鞋套,防滑/防水更耐磨
  2. 数据挖掘算法之决策树算法总结
  3. 宝塔linux面板假设nextcloud,宝塔面板部署NextCloud(14.0.3)逐一解决后台安全及设置警告...
  4. ubuntu linux 批量部署,使用Cobbler批量部署Linux和Windows:CentOS/Ubuntu批量安装(二)...
  5. php pdo 查询语句,PDO:预处理语句(参数化查询)
  6. java调用js查询mongo_mongodb操作之使用javaScript实现多表关联查询
  7. 前端 input怎么显示null_小猿圈WEB前端之HTML5+CSS3面试题(一)
  8. python中x_python中round(x,[n])的使用
  9. mysql数据库密码错误_MySQL数据库经典错误六 数据库密码忘记的问题
  10. 北航计算机学院有河南的,北航计划在豫招生165人 河南多所高职公布预录名单...