洛谷 P1410 子序列(DP)
这题的题解的贪心都是错误的...正解应该是个DP
考虑有哪些有关的条件:两个序列的当前长度, 两个序列的末尾数, 把这些都压进状态显然是会GG的
考虑两个长度加起来那一位的数一定是其中一个序列的末尾, 而我们要末尾的数尽量小, 所以完全可以把这个DP缩成两维
设f[i][j]为当前选到第i位, a[i]选入第一个序列, 则末尾为a[i], 第一个序列长度为j, 则第二个序列长度为i-j时第二个序列末尾的数最小为多少。
则有 if(a[i]<a[i+1]) f[i+1][j+1]=min(f[i+1][j+1], f[i][j])
if(f[i][j]<a[i+1]) f[i+1][i+1-j]=min(f[i+1][i+1-j], a[i]) (此时第一个序列和第二个序列互换了)
互换的思想真的非常喵喵哇....第一次见到T T
#include<iostream> #include<cstring> #include<cstdlib> #include<cstdio> #include<cmath> #include<algorithm> using namespace std; const int maxn=2010, inf=1e9; int n; int f[maxn][maxn], a[maxn]; inline void read(int &k) {int f=1; k=0; char c=getchar();while(c<'0' || c>'9') c=='-'&&(f=-1), c=getchar();while(c<='9' && c>='0') k=k*10+c-'0', c=getchar();k*=f; } inline int min(int a, int b){return a<b?a:b;} int main() {while(scanf("%d", &n)!=EOF){for(int i=1;i<=n;i++) read(a[i]);for(int i=1;i<=n;i++) for(int j=0;j<=i;j++) f[i][j]=inf;for(int i=0;i<n;i++)for(int j=0;j<=i;j++){if(a[i]<a[i+1]) f[i+1][j+1]=min(f[i+1][j+1], f[i][j]);if(f[i][j]<a[i+1]) f[i+1][i-j+1]=min(f[i+1][i-j+1], a[i]);}printf("%s\n", (f[n][n>>1]!=inf)?"Yes!":"No!");} }
View Code
转载于:https://www.cnblogs.com/Sakits/p/7794578.html
洛谷 P1410 子序列(DP)相关推荐
- 洛谷P1410 子序列【玄学DP】【绿】
Date:2022.03.23 题目描述 给定一个长度为 NN(NN 为偶数)的序列,问能否将其划分为两个长度为 N / 2N/2 的严格递增子序列. 输入格式 若干行,每行表示一组数据. 对于每组数 ...
- 洛谷1846 游戏 dp
题目链接 题意: 给定两个正整数数列,你要用它们来做一个游戏:你需要对数列进行若干次操作,每一次操作,应选择两个正整数K1和K2 ,并删除第一个数列的最后K1个数,计算出它们的和S1:删除第二个数列的 ...
- 洛谷P3146 区间dp做题笔记
不是题解,不是题解,不是题解,纯属个人笔记,不知所言. 传送门:P3146 问:什么时候才能写的一手漂亮的dp? 答:夜深人静之时,魂归故里之日. 此题是一道基础的区间dp的题,看完题解犹豫片刻,之后 ...
- 洛谷1373(dp)
常规线性dp,需要时就加一维.\(dp[i][j][t][s]\)表示在点\((i,j)\)时瓶子里剩\(t\)且为\(s\)走(0代表小a,1代表uim)时的方案数. de了半天发现是初次尝试的快速 ...
- 洛谷--橙色百道DP总结
最近刷完了洛谷橙色DP大约一百道,算是发现了一些套路,就部分题目做一些总结. 大概分为三类 第一类,九大背包及其衍生 第二类,经典DP模型,如LCS,LIS等 第三类,实际问题背景的普通,环形,树上D ...
- 洛谷 深基 第4部分 基础数学与数论(19-21课)
洛谷 深基 第4部分 基础数学与数论 第19章 位运算与进制转换 P1143 进制转换 https://www.luogu.com.cn/problem/P1143 洛谷P1143 进制转换的Pyt ...
- 洛谷 U266184 宠物小精灵之收服
题目链接:宠物小精灵之收服 - 洛谷 标签:dp.背包问题 思路: 精灵球个数 与 对皮卡丘的伤害 都可以看成背包问题中的体积,所以将dp数组升级为二维 dp[i][j]表示 i个精灵球 j滴血皮卡丘 ...
- 洛谷P2766-最长递增子序列问题
chunlvxiong的博客 题目描述: 给定正整数序列x1,...,xn (1≤n≤500). 1.计算其最长递增子序列的长度s. 2.计算从给定的序列中最多可取出多少个长度为s的递增子序列. 3. ...
- 动态规划——最长公共子序列(洛谷P1439)
题目选自洛谷P1439 动态规划的模板题,最长公共子序列 1.譬如给定2个序列: 1 2 3 4 53 2 1 4 5 试求出最长的公共子序列. 那么 最普通的 LCS 代码: #include< ...
最新文章
- Redmine+Apache+SVN+Postfix完整配置指南
- 6/5 补瓷砖,购浴缸
- 云计算,能回答地球最终流浪到哪里吗?
- 【Python】一种超简单的变量交换方法
- 无人车火了 百度是如何做到的?
- (数据库系统概论|王珊)第九章关系查询处理和关系优化-第一节:查询处理
- [转载] python numpy矩阵运算加速器 NumExpr
- MySQL数据库开发的三十六条军规
- oracle脑裂的判断机制,Keepalived两节点出现双VIP的情况(脑裂)
- salt 源码之 salt-minion启动过程
- android dff播放器,无损音乐解码播放器
- 泛微OA云桥 未授权任意文件读取
- 2021年高处安装、维护、拆除新版试题及高处安装、维护、拆除考试试卷
- 对微信卖小电影的一次内网漫游
- 关于计算机网络的学习
- 女性内分泌失调的8种症状
- 赛效:怎么用改图鸭进行一键Logo设计?
- mysql跳过安全_MYSQL安装之最新版MySQL手把手安装教程
- Android apk和aab互相转换
- 微信小程序中的页面文件和组件
热门文章
- Java常见的面试题(一)
- [转]linux系统增加swap大小方法(安装oracle可能需要)
- 红米android 版本,#MIUI#关于红米手机4高配版 Android版本适配的说明【miui9吧】_百度贴吧...
- max格式转obj小工具_PDF文件转JPG等图片格式的小工具
- 如果有一天,我们和甲方交换身份…
- oracle sql删除重复,【转帖】SQL Oracle删除重复记录
- redis取出list最边的一个_这几个Redis使用技巧,让你的程序快如闪电
- Mysql多表查询(案例1)
- mysql5.6英文版安装步骤_mysql5.6版本安装步骤详解
- 基带工程师是做什么的_【思唯网络学院】网络工程师认证可以用来做什么?