Comet OJ - Contest #6 B.双倍快乐(二维最大上升子序列和)
题目描述
Illyasviel:"你想要最长不下降子序列吗?"
star-dust:"好啊!"
Illyasviel:"老板,给我整两个最长不下降子序列,要最大的。"
求序列 a 中的两个不相交的不下降子序列使得他们的元素和的和最大,子序列可以为空。
注 1:序列 a 不下降的定义是不存在 l<r 且 al>ar
注 2:两个子序列不相交的定义是:不存在 ai 即在第一个子序列中也在第二个子序列中。
输入描述
第一行一个数字 n 代表序列 a 的长度。
接下来一行 n 个数,第 i 个数代表 ai。
数据范围:
- 2≤n≤500
- 1≤ai≤105
输出描述
一行一个整数代表两个不相交的不下降子序列的元素和的最大值。
样例输入 1
9
5 3 2 1 4 2 1 4 6
样例输出 1
22
提示
样例解释:
第一个序列选了 "5"
第二个序列选了 "3 4 4 6"
总和为 22。
https://cometoj.com/contest/48/problem/B
二维LIS变式求两不相交上升子序列最大和。
非常好的一道题。其中思想与一维LIS相似只不过拓展到二维,dp[i][j]表示两序列分别以i,j为结尾的最大和,通过两重for来枚举i,j的情况。
这里有一个巧妙的性质:虽然i,j在枚举时会有相同的情况,但是dp只对含k的情况更新,而k!=i与j即两下标不会相等,所以这里保证了两序列不会有相交的元素。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll; int a[];
int dp[][]; int main()
{
int n,m,i,j,k;
scanf("%d",&n);
for(i=;i<=n;i++){
scanf("%d",&a[i]);
}
for(k=;k<=n;k++){
for(i=;i<k;i++){
for(j=;j<k;j++){
if(a[i]<=a[k]){
dp[k][j]=max(dp[k][j],dp[i][j]+a[k]);
}
if(a[j]<=a[k]){
dp[i][k]=max(dp[i][k],dp[i][j]+a[k]);
}
}
}
}
int ans=;
for(i=;i<=n;i++){
for(j=;j<=n;j++){
ans=max(ans,dp[i][j]);
}
}
printf("%d\n",ans);
return ;
}
Comet OJ - Contest #6 B.双倍快乐(二维最大上升子序列和)的更多相关文章
- Comet OJ - Contest #2简要题解
Comet OJ - Contest #2简要题解 前言: 我没有小裙子,我太菜了. A 因自过去而至的残响起舞 https://www.cometoj.com/contest/37/problem/ ...
- Comet OJ - Contest #2 简要题解
Comet OJ - Contest #2 简要题解 cometoj A 模拟,复杂度是对数级的. code B 易知\(p\in[l,r]\),且最终的利润关于\(p\)的表达式为\(\frac{( ...
- Comet OJ - Contest #4--前缀和
原题:Comet OJ - Contest #4-B https://www.cometoj.com/contest/39/problem/B?problem_id=1577传送门 一开始就想着暴力打 ...
- Comet OJ - Contest #11 题解&赛后总结
Solution of Comet OJ - Contest #11 A.eon -Problem designed by Starria- 在模 10 意义下,答案变为最大数的最低位(即原数数位的最 ...
- Comet OJ - Contest #8
Comet OJ - Contest #8 传送门 A.杀手皇后 签到. Code #include <bits/stdc++.h> using namespace std; typede ...
- Comet OJ - Contest #13-C2
Comet OJ - Contest #13-C2 C2-佛御石之钵 -不碎的意志-」(困难版) 又是一道并查集.最近做过的并查集的题貌似蛮多的. 思路 首先考虑,每次处理矩形只考虑从0变成1的点.这 ...
- Comet OJ - Contest #13 「火鼠的皮衣 -不焦躁的内心-」
来源:Comet OJ - Contest #13 芝士相关: 复平面在信息学奥赛中的应用[雾 其实是道 sb 题??? 发现原式貌似十分可二项式定理,然后发现确实如此 我们把 \(a^i\) 替换成 ...
- Comet OJ - Contest #13 「佛御石之钵 -不碎的意志-」(hard)
来源:Comet OJ - Contest #13 一眼并查集,然后发现这题 tmd 要卡常数的说卧槽... 发现这里又要用并查集跳过访问点,又要用并查集维护联通块,于是开俩并查集分别维护就好了 一开 ...
- Comet OJ - Contest #5
Comet OJ - Contest #5 总有一天,我会拿掉给\(dyj\)的小裙子的. A 显然 \(ans = min(cnt_1/3,cnt_4/2,cnt5)\) B 我们可以感性理解一下, ...
随机推荐
- orangepi设置vnc开机自启动
首先需要创建一个文件,执行以下命令,自动打开空白文件,在里面编辑内容即可 sudo gedit /etc/init.d/tightvncserver 把以下内容粘贴进去,然后点击保存即可. #!/bi ...
- 【前端开发】】js中var写和不写的区别
js中var用与不用的区别 Javascript声明变量的时候,虽然用var关键字声明和不用关键字声明,很多时候运行并没有问题,但是这两种方式还是有区别的.可以正常运行的代码并不代表是合适的代码. v ...
- sed 修改文件内容
修改命令对照表 练习实例 修改/etc/passwd中第1行第1个root为ROOT sed -i '1s/root/ROOT/' passwd 修改/etc/passwd中第5行到第10行中所有的/ ...
- java数据类型转换的常见方法
public class Testfun { public static void main(String[] args) { // (一)跨Number父类的类型转换 // 1.str转int =& ...
- git命令——git add
如何理解git add git add命令本身并不复杂,字面意义上理解是“将一个文件添加到项目中“.但是这种理解有缺陷,有时候可能会出现某个文件同时存在暂存区域 和 非暂存区域(staged and ...
- 使用Dell iDRAC服务器远程控制安装操作系统简要图解
使用Dell iDRAC服务器远程控制安装操作系统简要图解 iDARC tools iDRAC又称为Integrated Dell Remote Access Controller,也就是集成戴尔 ...
- JAVA 使用原生jdbc批量添加,表被锁住问题
今天用jdbc批量添加数据的时候遇到了一个问题,当数据添加成功过后,再想对该表进行操作发现表被锁住了,检查了下代码发现事务提交了呀!!!!!!!!!!!! 去网上查了大半天的资料才发现问题,在conn ...
- 安装Windows8/Windows10时,在安装界面提示无法在此驱动器上安装Windows
该方法会清除整个硬盘上的数据,这是对整个硬盘的操作,如果你有多个硬盘,请一定要选好哪块硬盘,其他的硬盘数据不会被清除. 1.在当前的安装界面按Shift + F10,打开cmd窗口 2.输入diskp ...
- centos 安装ELK
准备安装环境 由于本人的centos是通过虚拟机来进行安装的,为了本地电脑能够访问centos系统中的端口,则需要把防火墙进行关闭,通过以下方式进行关闭防火墙. # vi /etc/sysconfig ...
- SVN安装配置教程
第一步:安装Apache LInux centos6.5 (备注:为了方便可以把linux防火墙关掉,这样就不需要一个一个开端口了,建议开发测试可以这样,正式环境不推荐) 第二步:安装SVN服 ...