hdu1087 dp(最大上升子序列和)
2015-02-13 15:43
295 查看
题意,给出一列数,要求所有上升子序列中序列和最大的。
这回不是求长度了,但是还是相当基础的 dp 水题,只要用 dp [ q ] 记录以 第 q 个数 a [ q ] 为结尾的上升子序列的最大的和就可以了
对于 q ,初始化 dp [ q ] = a [ q ] ,从最前面到 q 遍历,若有第 i 个数 a [ i ] < a [ q ] ,则 dp [ q ] = max ( dp [ q ] , dp [ i ] + a [ q ] );
这样 dp 一遍并同时记录下最大值,就可以直接输出结果了
View Code
这回不是求长度了,但是还是相当基础的 dp 水题,只要用 dp [ q ] 记录以 第 q 个数 a [ q ] 为结尾的上升子序列的最大的和就可以了
对于 q ,初始化 dp [ q ] = a [ q ] ,从最前面到 q 遍历,若有第 i 个数 a [ i ] < a [ q ] ,则 dp [ q ] = max ( dp [ q ] , dp [ i ] + a [ q ] );
这样 dp 一遍并同时记录下最大值,就可以直接输出结果了
#include<stdio.h> #include<string.h> #define max(a,b) a>b?a:b int a[1002]; long long dp[1002]; int main(){ int n; while(scanf("%d",&n)!=EOF&&n!=0){ int q,i,j; long long m=0; for(q=1;q<=n;q++){ scanf("%d",&a[q]); dp[q]=a[q]; for(i=1;i<q;i++){ if(a[i]<a[q]){ dp[q]=max(dp[q],dp[i]+a[q]); } } m=max(m,dp[q]); } printf("%I64d\n",m); } return 0; }
View Code
相关文章推荐
- 51nod 1294 修改数组(dp,逆向思维,最大上升子序列)
- hdu1087(求一个长上升子序列,使其和最大)
- hdu 1087 Super Jumping! Jumping! Jumping! (最大 上升子序列 线性 dp)
- HDU 1087 Super Jumping! Jumping! Jumping! (线性dp 最大上升子序列)
- hdu 1069 Monkey and Banana 再来一波DP啦~~LIS的变形,会最大上升子序列就可以A啦~
- 暑期dp46道(31)--HDOJ 1087 最大上升子序列和 dp(水)
- hdu 1087 Super Jumping! Jumping! Jumping!(基础DP,最大上升子序列和)
- HDU1087 Super Jumping! Jumping! Jumping!【最长上升子序列+DP】
- HDU 1087 Super Jumping! Jumping! Jumping! --- DP入门之最大上升子序列
- 【dp专题1】hdu1087最大上升子段和 E - Super Jumping! Jumping! Jumping!
- HDU1087(最长上升子序列DP)
- (hdu step 3.2.3)Super Jumping! Jumping! Jumping!(DP:求最长上升子序列的最大和)
- POJ 3616 Milking Time(基础DP,最大上升子序列和变形)
- dp --- 二维dp + 最大上升子序列
- 动态规划:HDU1087-Super Jumping! Jumping! Jumping!(最大上升子序列和)
- hdu1087(上升子序列的最大和)
- EOJ1109 dp最大上升子序列
- HDU1087(最大上升子序列)
- hdu 1160 FatMouse's Speed(最大上升子序列dp)
- HDU 1257 (最大上升子序列)