洛谷 P3205:https://www.luogu.org/problemnew/show/P3205

复习区间DPing

思路

把理想队列拆分成

  1. 第一个和后面几个 划分成求后面几个的理想队列
  2. 最后一个和前面几个 划分成求前面几个的理想队列

样例:1701 1702 1703 1704

  1. 把1701拿出来 求1702 1703 1704的理想队列
  2. 把1704拿出来 求1701 1702 1703的理想队列

因此需要两个数组来划分阶段

f[i][j]为可以排成理想队列中[i,j]区间 且以最后一个排进去是i的初始队列种数。

g[i][j]为可以排成理想队列中[i,j]区间 且以最后一个排进去是j的初始队列种数。

就可以得出数组f的两种情况:

前一个排进去的人是i+1 当前人插到最左边

if(q[i]<q[i+1])
f[i][j]=(f[i][j]+f[i+1][j])%MOD;

前一个排进去的人是j 当前人插到最左边

if(q[i]<q[j])
f[i][j]=(f[i][j]+g[i+1][j])%MOD;

同理可得数组g的两种情况:

前一个排进去的人是i 当前人插到最右边

if(q[i]<q[j])
g[i][j]=(g[i][j]+f[i][j-1])%MOD;

前一个排进去的人是j-1 当前人插到最右边

if(q[j-1]<q[j])
g[i][j]=(g[i][j]+g[i][j-1])%MOD;

答案存在f[1][n]+g[1][n]中

代码

#include<iostream>
#include<cstdio>
using namespace std;
#define maxn 1010
#define MOD 19650827
int n;
int q[maxn];
int f[maxn][maxn],g[maxn][maxn];
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
cin>>q[i];
for(int i=;i<=n;i++)
f[i][i]=;//初始化本身为一种
for(int i=n-;i>=;i--)
for(int j=i+;j<=n;j++)
{
if(q[i]<q[i+])//i+1是从队首取的所以+f[i+1][j]
f[i][j]=(f[i][j]+f[i+][j])%MOD;
if(q[i]<q[j])//j是从队尾取的所以+g[i+1][j]
f[i][j]=(f[i][j]+g[i+][j])%MOD;
if(q[i]<q[j])//i是从队首取的所以+f[i][j-1]
g[i][j]=(g[i][j]+f[i][j-])%MOD;
if(q[j-]<q[j])//j-1是从队尾取的所以+g[i][j-1]
g[i][j]=(g[i][j]+g[i][j-])%MOD;
}
printf("%d",(f[][n]+g[][n])%MOD);
}

最新文章

  1. IIS请求筛选模块被配置为拒绝超过请求内容长度的请求
  2. PS 使用首记 修改png图片的颜色
  3. String中的Indexof,LastIndexOf, Indexofany,LastIndexOfAny 的区别
  4. java-web-j2e学习建议路线
  5. git config配置文件 (共有三个配置文件)
  6. Transition 1
  7. 开源mp3播放器--madplay 编译和移植 简记
  8. cmd输入svn提示svn不是内部或外部命令
  9. Java字符串格式化记录
  10. .NET Core/.NET之Stream简介
  11. spring-springmvc-jdbc小案例
  12. 2017-2018-2 20165316 实验三《敏捷开发与XP实践》实验报告
  13. vue 要点
  14. vue 引用公共方法(例子:截取字符串固定字数,其余显示...)
  15. 【网络知识】【1】http、tcp/udp、soap的区别
  16. hdu6121 Build a tree 模拟
  17. asp搭建网站
  18. Vue.js:组件
  19. 容器基础(八): 使用docker swarm部署程序
  20. mysql: 模糊查询 feild like keyword or feild like keyword , concat(feild1,feild2,feild3) like keyword

热门文章

  1. 案例43-crm练习获取客户列表使用struts2
  2. TOJ 2815 Connect them (kruskal+并查集)
  3. LeetCode 319 ——Bulb Switcher——————【数学技巧】
  4. springboot整合mongo多数据源
  5. C++程序设计基础(8)main函数
  6. bzoj 5217: [Lydsy2017省队十连测]航海舰队
  7. 读《Wireshark网络分析就这么简单》读书笔记
  8. 简单的Extjs中的Combox选择下拉框使用
  9. Base class for cloning an object in C#
  10. Use the list and while to Build Shop car