hdu 1087 Super Jumping! Jumping! Jumping!(水DP)
2011-08-13 14:09
495 查看
求最大上升子序列的和。
记录以每个点为终点的最大和,下一个只要判断是否比前面大,如果大的话,取max{dp[i]+a[k]}。
网上搜了下,没有O(N)的算法。我也想不出来O(N)的 T T 。
记录以每个点为终点的最大和,下一个只要判断是否比前面大,如果大的话,取max{dp[i]+a[k]}。
网上搜了下,没有O(N)的算法。我也想不出来O(N)的 T T 。
#include <queue> #include <stack> #include <math.h> #include <time.h> #include <stdio.h> #include <stdlib.h> #include <iostream> #include <limits.h> #include <string.h> #include <string> #include <algorithm> #define MID(x,y) ( ( x + y ) >> 1 ) #define L(x) ( x << 1 ) #define R(x) ( x << 1 | 1 ) #define BUG puts("here!!!") using namespace std; const int MAX = 1010; int dp[MAX]; int a[MAX]; int main() { int n; while( ~scanf("%d",&n) && n ) { for(int i=0; i<n; i++) { scanf("%d",&a[i]); dp[i] = a[i]; } for(int i=1; i<n; i++) for(int k=0; k<i; k++) if( a[i] > a[k] ) dp[i] = max(dp[i],dp[k] + a[i]); int ans = dp[max_element(dp,dp+n) - dp]; printf("%d\n",ans); } return 0; }
相关文章推荐
- hdu1087 - Super Jumping! Jumping! Jumping! (dp 求递增子序列的最大和)
- HDU 1087 Super Jumping! Jumping! Jumping! (dp)
- hdu 1087 Super Jumping! Jumping! Jumping!(dp:上升子序列最大和)
- hdu 1087Super Jumping! Jumping! Jumping!(简单的dp就是一个判断条件两个for循环,将这个量与前面出现的两进行比较)
- HDU 1087 Super Jumping! Jumping! Jumping!(基础DP)
- hdu 1087 Super Jumping! Jumping! Jumping!(DP)
- HDU 1087 Super Jumping! Jumping! Jumping! DP 水题, 没能水过
- HDU-1087 Super Jumping! Jumping! Jumping!( DP )
- HDU 1087 Super Jumping! Jumping! Jumping! --- DP入门之最大上升子序列
- HDU 1087 Super Jumping! Jumping! Jumping!(dp最长上升子序列的和)
- HDU 1087 Super Jumping! Jumping! Jumping!【dp】
- HDU---1087-Super Jumping! Jumping! Jumping!(DP)
- hdu 1087 Super Jumping! Jumping! Jumping!(基础DP,最大上升子序列和)
- HDU - 1087 Super Jumping! Jumping! Jumping! (DP)
- hdu 1087 Super Jumping! Jumping! Jumping!(最长上升子序列&dp)
- HDU 1087 Super Jumping! Jumping! Jumping!(dp)
- hdu 1087 Super Jumping! Jumping! Jumping!(简单dp)
- Super Jumping! Jumping! Jumping! -HDU 1087 dp
- HDU 1087 Super Jumping! Jumping! Jumping! (线性dp)
- HDU 1087:Super Jumping! Jumping! Jumping!(DP之LIS)