hdu 1087 最大上升子序列
2015-04-24 17:11
253 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1087
dp入门题。。最大上升子序列。
定义dp[i] 表示以ai结尾的最大上升子序列。
可以由两个状态转移过来,一个是只有ai的子序列,另一个是j<i且aj<ai的以aj结尾的最大上升子序列的元素和再加上ai。
转移方程:dp[i] = max(dp[i],dp[j]+a[i]);
代码:
dp入门题。。最大上升子序列。
定义dp[i] 表示以ai结尾的最大上升子序列。
可以由两个状态转移过来,一个是只有ai的子序列,另一个是j<i且aj<ai的以aj结尾的最大上升子序列的元素和再加上ai。
转移方程:dp[i] = max(dp[i],dp[j]+a[i]);
代码:
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; #define M 1009 #define INF 0x3f3f3f3f int a[M]; int dp[M]; int main() { int n; while(scanf("%d",&n)==1 && n) { for(int i = 0;i < n;i++) scanf("%d",&a[i]); //memset(dp,0,sizeof(dp)); //dp[0] = a[0]; int maxn = -INF; for(int i = 0;i < n;i++) { dp[i] = a[i]; for(int j = 0;j < i;j++) { if(a[j]<a[i]) dp[i] = max(dp[i],dp[j]+a[i]); if(dp[i]>maxn) maxn = dp[i]; } } //for(int i = 0;i < n;i++) // printf("debug--%d ",dp[i]); printf("%d\n",maxn); } return 0; }
相关文章推荐
- 动态规划 ② HDU - 1087 Super Jumping! Jumping! Jumping! (LIS 最大上升子序列)
- Hdu 1087 Super Jumping! Jumping! Jumping!【最大上升子序列和】
- HDU 1087 Super Jumping! Jumping! Jumping! (线性dp 最大上升子序列)
- hdu 1087 (最大上升子序列和)动态规划
- hdu 1087 最大上升子序列和
- HDU 1087 Super Jumping! Jumping! Jumping!(最大上升子序列)
- HDU 1087 Super Jumping!Jumping!Jumping求连续上升子序列的最大和值 (解析)
- HDU 1087 Super Jumping! Jumping! Jumping!(最大上升子序列和)
- HDU 1087 Super Jumping! Jumping! Jumping! --- DP入门之最大上升子序列
- HDU 1087 Super Jumping! Jumping! Jumping!(求最大上升子序列和)
- 每日三题-Day2-C(HDU 1087 Super Jumping! Jumping! Jumping! 最大上升子序列和)
- HDU 1087 Super Jumping! Jumping! Jumping! (求最大上升子序列和,动态规划)
- HDU 1087 Super Jumping! Jumping! Jumping!(最大的上升子序列的和)(不是最长)(易混淆)
- hdu 1087 Super Jumping! Jumping! Jumping! 最大上升子序列。模板题
- 【HDU 1087】Super Jumping! Jumping! Jumping!(最大上升子序列和,动态规划)
- hdu 1087 Super Jumping! Jumping! Jumping!(最大上升子序列之和)
- HDU 1087 最大上升子序列
- hdu 1087 Super Jumping! Jumping! Jumping!(LIS变形题,求上升子序列的最大和)
- hdu 1087 Super Jumping! Jumping! Jumping! (最大 上升子序列 线性 dp)
- HDU 1087(最大上升子序列+动态规划)