CometOJ#6 双倍快乐(简单DP)
链接:https://www.cometoj.com/contest/48/problem/B
题意:给出一串数列,要求在这个数列中找出两条“不相交”的非下降子序列使得子序列之和最大。“不相交”即不存在任意的ai同时存在于两个子序列中。
分析:笔者刷题量不多,这道题对笔者加深动态规划求子序列的理解很有帮助;题目要求非下降子序列的最大和,这里我们要求的是两条子序列。做题时的第一想法是走两遍DP,先求出一条和最大的子序列,把这条子序列中的元素给剔除,接着再重复该步骤,得到另一条和最大的子序列,最后把两条子序列的和加起来。但是,这种做法是存在后效性的,我们的目的是要求得两条子序列的和最大,如果每次只是单纯的找和最大的子序列,那么很有可能在第一次选元素时就断了使得子序列总和最大的“桥梁”。好比方说:5 4 4 5 4;通过该方案得到的两条序列会是:“4 4 5”、“5”,最终结果是18。但最优的方案其实是:“4 4 4”、“5 5”,结果为22。
设dp[i][j]为两条子序列的末端分别为i和j时的子序列和,dp[0][0] = 0;其状态转移方程可以由单个子序列的转移方程推广得到,详见代码部分。
1 #include <bits/stdc++.h> 2 3 using namespace std; 4 5 int main() { 6 int n; 7 scanf("%d",&n); 8 9 int num[n+1]; 10 num[0] = 0; 11 for (int i=1;i<=n;i++) { 12 scanf("%d",&num[i]); 13 } 14 15 int dp[n+1][n+1]; 16 memset(dp,0,sizeof(dp)); 17 int ans = 0; 18 for (int i=1;i<=n;i++) { 19 for (int j=0;j<i;j++) { 20 if (num[i] >= num[j]) { 21 for (int k=0;k<i;k++) { 22 dp[i][k] = max(dp[i][k],dp[j][k] + num[i]); 23 dp[k][i] = max(dp[k][i],dp[k][j] + num[i]); 24 ans = max(ans,max(dp[i][k],dp[k][i])); 25 } 26 } 27 } 28 } 29 printf("%d\n",ans); 30 return 0; 31 }
转载于:https://www.cnblogs.com/doublebit/p/11105845.html
CometOJ#6 双倍快乐(简单DP)相关推荐
- 2019.7.14 并查集P1197 [JSOI2008]星球大战 说能过那是假的(动态规划) cometoj #c6 双倍快乐
星球大战 这题是使用了一个total变量持续记录连通块数目,极大减少了判断时间 一开始我直接用从0到n-1遍历找连通块,这样绝对超时 通过代码如下 #include<bits/stdc++.h& ...
- Comet OJ - Contest #6 B.双倍快乐(二维最大上升子序列和)
双倍快乐 题目描述 Illyasviel:"你想要最长不下降子序列吗?" star-dust:"好啊!" Illyasviel:"老板,给我整两个最长 ...
- 畅享原汁+气泡的双倍快乐 摩飞气泡原汁机全面评测
▼前言 5月立夏以来,天气猝不及防地热了起来,东北气温也一度直高涨,直逼30度大关.在这时,能痛饮一杯"快乐水",那简直要幸福到飞起!不过,作为一个已过而立之年的大叔来说,养生早已 ...
- Codeforces 41D Pawn 简单dp
题目链接:点击打开链接 给定n*m 的矩阵 常数k 以下一个n*m的矩阵,每一个位置由 0-9的一个整数表示 问: 从最后一行開始向上走到第一行使得路径上的和 % (k+1) == 0 每一个格子仅仅 ...
- hdu2067 简单dp或者记忆化搜索
题意: 小兔的棋盘 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...
- POJ1088:滑雪(简单dp)
题目链接: http://poj.org/problem?id=1088 题目要求: 一个人可以从某个点滑向上下左右相邻四个点之一,当且仅当高度减小.求可以滑落的最长长度. 题目解析: 首先要先排一 ...
- 第三讲 数学与简单DP【完结】
目录 1205. 买不到的数目 [数学结论题] 1211. 蚂蚁感冒 [模拟 / 推理] 1216. 饮料换购 [简单 / 模拟] 2. 01背包问题 [板子题] 1015. 摘花生 [简单DP] 8 ...
- hdu 2881(简单dp)
题意:n*n的矩阵,里面有m个格子是有任务要去完成的,t,x,y表示要在第t秒到达(x,y)的格子完成任务,问你最多可以完成多少 解题思路:简单dp,将时间排个序后就是LIS #include< ...
- P1005 矩阵取数游戏(__int128模板/简单dp)
转跳P1005 题目描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的 n \times mn×m 的矩阵,矩阵中的每个元素 a_{i,j}a i,j 均为非负整数.游戏规则如下: 每次取数时 ...
最新文章
- mysql主主复制、主从复制、半同步的实现
- o型圈沟槽设计软件_O型圈的设计注意事项
- python动态语言解释_python是动态语言吗
- 基线系统需要受到更多关注:基于词向量的简单模型 | ACL 2018论文解读
- php import用法,JavaScript中import怎么使用?
- 配置kerberos_Step by Step 实现基于 Cloudera 5.8.2 的企业级安全大数据平台 Kerberos的整合...
- python程序代码大全-Python编程代码示例 - 全文
- 超全深度学习细粒度图像分析:项目、综述、教程一网打尽
- logistic映射图像加密matlab,基于Logistic映射与排序变换的图像加密算法
- 【开源工程】VirtualDub
- Python 编程之Tkinter的使用01
- 智源社区周刊:Gary Marcus谈大模型研究可借鉴的三个因素;OpenAI提出视频预训练模型VPT,可玩MC游戏...
- 处nm是什么意思_“nm”是什么意思啊?
- 360cdn能挡住cc攻击_人人用得起的CDN加速服务,可防御CC攻击
- 腾讯物联网系统TOS,内核移植起来比你想象的要简单
- H5分享页面背景音乐及播放视频
- 服务注册与发现 — 选择 CP 还是 AP?
- 使用Synology群晖内置web station和榴莲壳发布自己的网站(一)安装Web Station
- 计算机应用基础十分钟说课,计算机应用基础说课稿.ppt
- Termux安装数据库(手机安装数据库)...
热门文章
- 基于python实现将一个文件夹中的图片移动到另一个文件夹
- [蓝桥杯][算法提高VIP]金陵十三钗(状压dp记忆化搜索)
- [蓝桥杯][算法训练VIP]接水问题(思维)
- WSDM 2022 | 点击率模型特征交叉方向的发展及CAN模型介绍
- ROS2学习(十六).ROS概念 - 构建系统
- solr5.3.1 mysql_Solr5.3.1 dataimport 导入mysql数据
- oracle存储过程隐式函数,Oracle存储过程,函数。
- Linux Ubuntu 修改Grub,添加删除启动项,初步辨析Grub文件。
- AI有道干货 --- 126 篇 AI 原创文章精选(ML、DL、资源、教程)
- 哈希表及哈希表查找相关概念(转)