HDU 1087 Super Jumping! Jumping! Jumping!(求最大上升子序列和)
2016-07-21 10:22
411 查看
题目链接;
HDU 1087 Super Jumping! Jumping! Jumping!
题意:
求最大上升子序列和。
数据范围:n≤1000
分析:
用dp[i]表示以i为结尾的最大上升子序列和。那么
dp[i]=max(dp[i],dp[j]+data[i])(j<i且data[j]<data[i]
初始化dp[i]=data[i]。
最后扫一下dp[i]取最大就好了。
时间复杂度:O(n2)
HDU 1087 Super Jumping! Jumping! Jumping!
题意:
求最大上升子序列和。
数据范围:n≤1000
分析:
用dp[i]表示以i为结尾的最大上升子序列和。那么
dp[i]=max(dp[i],dp[j]+data[i])(j<i且data[j]<data[i]
初始化dp[i]=data[i]。
最后扫一下dp[i]取最大就好了。
时间复杂度:O(n2)
#include <iostream> #include <cstdio> #include <cstring> #include <string> #include <algorithm> #include <climits> #include <cmath> #include <ctime> #include <cassert> #define IOS ios_base::sync_with_stdio(0); cin.tie(0); using namespace std; typedef long long ll; const int MAX_N = 1010; int n; int data[MAX_N]; ll dp[MAX_N]; int main() { while(~scanf("%d", &n) && n) { for(int i = 0; i < n; ++i) { scanf ("%d", &data[i]); } for(int i = 0; i < n; ++i) { dp[i] = data[i]; for(int j = 0; j < i; ++j) { if(data[j] >= data[i]) continue; dp[i] = max(dp[i], dp[j] + data[i]); } } ll ans = dp[0]; for(int i = 1; i < n; ++i) { ans = max(ans, dp[i]); } printf("%lld\n", ans); } return 0; }
相关文章推荐
- 详解Android应用中屏幕尺寸的获取及dp和px值的转换
- 基于Android中dp和px之间进行转换的实现代码
- Android中dip、dp、sp、pt和px的区别详解
- LFC1.0.0 版本发布
- Android dpi,dip,dp的概念以及屏幕适配
- Android px、dp、sp之间相互转换
- HP data protector软件学习1--基本角色与基本工作流程
- HP data protector软件学习2--软件组成与界面介绍
- android中像素单位dp、px、pt、sp的比较
- Android对px和dip进行尺寸转换的方法
- 【HDU 5366】The mook jong 详解
- 【HDU 2136】Largest prime factor 详细图解
- 【HDU 1568】Fibonacci 数学公式 详解
- Android根据分辨率进行单位转换-(dp,sp转像素px)
- android 尺寸 dp,sp,px,dip,pt详解
- DP问题各种模型的状态转移方程
- HDU 1568
- HDU1290
- POJ-1695-Magazine Delivery-dp
- nyoj-1216-整理图书-dp