最大上升子序列的和
2013-06-23 00:14
134 查看
上升子序列
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
一个只包含非负整数的序列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}等等。这些子序列中序列和最大的是子序列{1, 3, 5, 9},它的所有元素的和为18。
对于给定的一个序列,求出它的最大上升子序列的和。
注意:最长的上升子序列的和不一定是最大的哦。
输入
输入包含多组测试数据,对于每组测试数据:输入数据的第一行为序列的长度 n(1 ≤ n ≤ 1000),
第二行为n个非负整数 b1,b2,...,bn(0 ≤ bi ≤ 1000)。
输出
对于每组测试数据,输出其最大上升子序列的和。示例输入
7 1 7 3 5 9 4 8
示例输出
18
提示
来源
qinchuan#include<stdio.h> int main() { int s[1007],sum[1007]; int n,max,i,j; while(scanf("%d",&n)!=EOF) { for(i=0;i<n;i++) scanf("%d",&s[i]); sum[0]=s[0]; for(i=0;i<n;i++) { max=0; for(j=0;j<i;j++) { if(s[i]>s[j]) { if(max<sum[j]) max=sum[j]; } } sum[i]=s[i]+max; //printf("%d\n",sum[i]); } int ans=0; for(i=0;i<n;i++) { if(ans<sum[i]) ans=sum[i]; } printf("%d\n",ans); } return 0; }
相关文章推荐
- “最长上升子序列,最大连续子序列和,最长公共子串”的Java实现
- “最长上升子序列,最大连续子序列和,最长公共子串”的Java实现
- hdoj 1950 Bridging signals【二分求最大上升子序列长度】【LIS】
- HDOJ --1950 Bridging signal【利用二分法来求最大上升子序列长度】
- scu oj 4441 Necklace(dp+树状数组求上升序列最大和)
- 经典字符串算法 “最长上升子序列,最大连续子序列和,最长公共子串”
- tyvj 1208 最长不下降子序列2 求序列b1,b2,b3,…,bm中所有长度(n)最大上升子序列的个数
- hdu 1087 最大上升子序列的和(dp或线段树)
- hdu1160 最大上升子序列问题+输出路径
- 最大上升子序列的和
- 动态规划例题 最大上升自序列
- hdu 1423 Greatest Common Increasing Subsequence 最大公共上升子序列 DP
- 找一个数组的最大上升子序列(允许不连续)
- 最大上升子序列,最大下降子序列,最大非增子序列,最大非减子序列
- hdu 1087 Super Jumping! Jumping! Jumping! ( 求序列的最大上升序列 )
- 动态规划之最大公共序列+最长上升子序列
- Lintcode 114.最大上升连续子序列
- hdu 1087 上升子序列最大和
- LightOJ 1421 Wavio Sequence 最大上升子序列变形 双dp
- 最大上升子序列长度