【openjudge】最大上升子序列和
2015-12-02 20:26
363 查看
描述
一个数的序列bi,当b1 < b2 < ... < bS的时候,我们称这个序列是上升的。对于给定的一个序列(a1, a2, ...,aN),我们可以得到一些上升的子序列(ai1, ai2, ..., aiK),这里1 <= i1 < i2 < ... < iK <= N。比如,对于序列(1, 7, 3, 5, 9, 4, 8),有它的一些上升子序列,如(1, 7), (3, 4, 8)等等。这些子序列中序列和最大为18,为子序列(1, 3, 5, 9)的和.
你的任务,就是对于给定的序列,求出最大上升子序列和。注意,最长的上升子序列的和不一定是最大的,比如序列(100, 1, 2, 3)的最大上升子序列和为100,而最长上升子序列为(1, 2, 3)
输入
输入的第一行是序列的长度N (1 <= N <= 1000)。第二行给出序列中的N个整数,这些整数的取值范围都在0到10000(可能重复)。
输出
最大上升子序列和
样例输入
样例输出
比较简单的dp,应该说是最基础的线性dp
f[i]表示以i为结尾的最大上升子序列和
【代码】
一个数的序列bi,当b1 < b2 < ... < bS的时候,我们称这个序列是上升的。对于给定的一个序列(a1, a2, ...,aN),我们可以得到一些上升的子序列(ai1, ai2, ..., aiK),这里1 <= i1 < i2 < ... < iK <= N。比如,对于序列(1, 7, 3, 5, 9, 4, 8),有它的一些上升子序列,如(1, 7), (3, 4, 8)等等。这些子序列中序列和最大为18,为子序列(1, 3, 5, 9)的和.
你的任务,就是对于给定的序列,求出最大上升子序列和。注意,最长的上升子序列的和不一定是最大的,比如序列(100, 1, 2, 3)的最大上升子序列和为100,而最长上升子序列为(1, 2, 3)
输入
输入的第一行是序列的长度N (1 <= N <= 1000)。第二行给出序列中的N个整数,这些整数的取值范围都在0到10000(可能重复)。
输出
最大上升子序列和
样例输入
7 1 7 3 5 9 4 8
样例输出
18
比较简单的dp,应该说是最基础的线性dp
f[i]表示以i为结尾的最大上升子序列和
【代码】
#include<iostream> #include<cstring> #include<cstdio> using namespace std; int n,Max,ans; int f[1005],a[1005]; int main(){ scanf("%d",&n); for (int i=1;i<=n;++i) scanf("%d",&a[i]); f[1]=a[1]; for (int i=2;i<=n;++i){ Max=0; for (int j=1;j<i;++j) if (Max<f[j]&&a[i]>a[j]) Max=f[j]; f[i]=Max+a[i]; } ans=f[1]; for (int i=2;i<=n;++i) if (f[i]>ans) ans=f[i]; printf("%d",ans); }
相关文章推荐
- React.js + Node.js使网站快速渲染
- 【openjudge】公共子序列
- 【openjudge】宠物小精灵之收服
- openjudge 精灵小宠物之收服
- 有了OpenMP,MPI,为什么还要MapReduce? (转载)
- OpenCV Mat 结构
- win7+64位+vs2010+opencv2.4.9配置问题
- Linux下使用FreeTDS访问MS SQL Server 2005数据库(包含C测试源码)
- nginx日志输出自定义header头字段
- hadoop2.7.1安装部署错误,求大神指导
- windows复制文件到Linux或Windows,有关FTP的配置与使用
- bash 命令行编辑
- opencar模板 opencartchina
- opencar模板 opencartchina
- 使用Docker快速部署Storm环境
- 由一个线程例子引发的思考(转载)
- Centos7.0 修改防火墙为iptables
- OpenJudge_P1759 最长上升子序列(DP)
- linux学习(三)如何在linux系统下利用vi编辑C/C++程序
- spatialhadoop2.3源码阅读(四) FileMBR类