本题大意:给定一个长度为n的序列a,让你输出这个序列子序列中元素和最大的最大上升子序列。

  本题思路:一开始肯定可以想到用LIS实现,我们用LIS实现的时候可以发现这个问题并不满足LIS问题的最优子结构,即两者的子问题肯定是不相同的...比如5 2 2 2 1 2 3,在这五个数中,如果按照LIS你会发现dp[3] = 2 ,dp[ 4] = 2,那么dp[5]呢,dp[5] = 3,刚好是不满足LIS求解的性质的,也就是违反了LIS的最优子结构性质,那么我们要如何才能得到另一份最优子结构呢,我看可以看到dp[4] = dp[3] + a[4] ,那么也就是如果我们assume dp[ i ] instead of 以i结尾的最大上升子序列,那么就可以得到一个状态转移方程dp[ i ] = max(dp[ j ] + a[ i ], dp[ i ])(j < i),接下来看代码......

  千万不要认为局部LIS和整体LIS的思路相同,否则你会陷入一个僵局......

  参考代码:

 #include <iostream>
#include <cstring>
#include <algorithm>
using namespace std; const int maxn = + ;
int n, a[maxn], dp[maxn]; int main () {
while(cin >> n && n) {
memset(dp, , sizeof dp);
for(int i = ; i <= n; i ++)
cin >> a[i];
dp[] = a[];
for(int i = ; i <= n; i ++) {
dp[i] = a[i];
for(int j = ; j < i; j ++)
if(a[i] > a[j])
dp[i] = max(dp[j] + a[i], dp[i]);
}
cout << *max_element(dp, dp + maxn) << endl;
}
return ;
}

最新文章

  1. 劈荆斩棘:Gitlab 部署 CI 持续集成
  2. lightoj 1074 spfa判断负环
  3. swift选择类或结构体
  4. FW开发代码规范---小任性(1)
  5. HTML中特殊字符和与之对应的ASCII代码
  6. ios模拟器未能安装此应用程序
  7. 用原生js模仿jquery
  8. JQuery笔记(三)选项卡
  9. 文件系统与linux相关知识点
  10. 初探CSRF在ASP.NET Core中的处理方式
  11. FasfDFS整合Java实现文件上传下载
  12. Go语言的切片
  13. RTP、RTCP、RTSP 概念
  14. 20162318 实验三《 敏捷开发与XP实践》实验报告
  15. LeetCode笔记:39. Combination Sum
  16. [转]Angular开发(十八)-路由的基本认识
  17. HDU 2096 小明A+B
  18. 多线程UI
  19. ReactNative 环境的搭建和启动(安卓版)
  20. linux编译安装mysql5.1.x

热门文章

  1. cookie、localStorage、sessionStorage和会话控制机制
  2. leetcode991
  3. ubuntu16.04搭建geodjango+postgresql+postgis的WebGIS框架(二))安装postgresql和postgis
  4. cin.tie与sync_with_stdio加速输入输出
  5. UNITY优化资料收集
  6. Tomcat虚拟目录设置
  7. Nginx ssl证书部署方法
  8. C#调用C++
  9. ASP.NET 工作流:支持长时间运行操作的 Web 应用程序
  10. Hibernate 再接触 基础配置 搭建Log4j环境 Junit日志环境等