题意

这个DP状态有点神。

首先考虑一个最暴力的状态:\(f_{i,j,k,u}\)表示第一个选了\(i\)个,第二个选了\(j\)个,第一个结尾为\(k\),第二个结尾为\(u\)是否可行。

现在考虑消减状态:

1.首先知道了处理到第几个,那么只要知道一个长度就能推出另一个。 因此状态可以改为\(f_{i,j,k,u}\)表示处理到了第\(i\)个,第一个序列选了\(j\)个,第一个序列结尾为\(k\),第二个序列结尾为\(u\)是否可行。(这并没有减少维数,只是转化下,方便处理。)

2.既然所有的数都要选,假设当前处理到了第\(i\)个,那么第\(i-1\)个必定在结尾,因此我们可以消去一维:

\(f_{i,j,k}\)表示处理到第\(i\)个,结尾是\(a_i\)的那个序列长度为\(j\),另一个结尾为\(k\)是否可行。

3.贪心地想,一个序列结尾越小越容易接数,因此可以将一维放到DP的值中:

\(f_{i,j}\)表示处理到第\(i\)个,结尾是\(a_{i-1}\)的那个序列长度为\(j\),另一个结尾最小是多少。

现在我们已经将DP减到二维,于是就可以转移了:

\(a_i>a_{i-1}\):此时\(a_i\)可以拼接在\(a_{i-1}\)后面:

\(f_{i,j}=\min(f_{i,j}f_{i-1,j-1})\)。

\(a_i>f_{i-1,i-j}\):此时我们可以将\(a_i\)接到另一个序列后面,于是我们交换两个序列,因为另一个序列后面接了\(a_i\),我们要符合定义,于是可得:

\(f_{i,j}=\min(f_{i,j},a_{i-1})\)。

最后判断\(f_{n,n/2}\)是否为\(inf\)。

数据范围不知道,到某dark上看了看,\(n\leqslant2000\)。

code:

#include<bits/stdc++.h>
using namespace std;
const int maxn=2010;
int T,n;
int a[maxn];
int f[maxn][maxn];
int main()
{
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
for(int i=1;i<=n;i++)scanf("%d",&a[i]);
memset(f,0x3f,sizeof(f));
f[0][0]=-1;
for(int i=1;i<=n;i++)
for(int j=1;j<=min(n/2,i);j++)
{
if(a[i]>a[i-1])f[i][j]=min(f[i][j],f[i-1][j-1]);
if(a[i]>f[i-1][i-j])f[i][j]=min(f[i][j],a[i-1]);
}
puts(f[n][n/2]<0x3f3f3f3f?"Yes!":"No!");
}
return 0;
}

最新文章

  1. [flex布局]-flex教程
  2. EasyUI TreeGrid DataTable转换数据实现案例
  3. C# Rotating Oval
  4. [BZOJ1370][Baltic2003]Gang团伙
  5. 【转】利用xcode生成的app生成可以在iphone和itouch上运行的ipa安装包
  6. 安卓app缓存设置
  7. HDU 4617 Weapon 三维计算几何
  8. maven的pom报plugins却是的解决方法2
  9. Ubuntu 系统 文件操作命令
  10. QT中的OpcDa 客户端 实现
  11. 如何激活Microsoft Office 2010?
  12. interrupt interrupted isInterrupted 方法对比、区别与联系 多线程中篇(八)
  13. ssh远程 和 上传/下载工具
  14. Java代码导入导出 Excel 表格最简单的方法
  15. Appium+python 使用 press_keycode 如何输入大写字母
  16. matlab sign函数用法及实例
  17. DSO windowed optimization 代码 (3)
  18. 《Android进阶之光》--事件总线
  19. laravel插入数据时报 502 Bad Gateway
  20. GDI+ 实现透明水印和文字

热门文章

  1. iviewer插件
  2. OSG嵌入QT的简明总结
  3. oracle 架构图
  4. 截取字符串substr和substring两者的区别
  5. 25.md5 collision(NUPT_CTF)
  6. Java之属性集(Properties类)
  7. Java之Lambda表达式
  8. java之程序流程控制
  9. Python 分析到底是谁操纵《庆余年》上了热搜?
  10. C++入门到理解之文件操作(文本文件的读写+二进制文件的读写)