HDU1087 【DP问题之最大递增子段和问题】
来源:互联网 发布:seo新手入门教程 编辑:程序博客网 时间:2024/05/22 02:18
状态方程:dp[j]=max{dp[i]}+a[j]; 其中,0<=i<=j,a[i]<a[j]
如果求最大值,要有个最小值,不断的更新用DP存所有可能性的组合:
2016.2.18更新:别人的方法终究不是自己的,看不懂乱写还是不会的;
题意:类似于跳棋,只能从低的跳到高的并求最高分数。如:2 1 3 ; 可以选择1->3 四分, 也可以2->3 五分;
就是求:最大递增子段和问题
思路: 从一组数据中找一组递增数列且和为最大,假如我们从最后面往前找,每次都要找出前面比本身的小的数 ,并加上dp[j],就是此时dp[j]最大的值
用dp[ ]记下相应的位置的最大和,dp[ i ]=max(num[ i ] ,f[ i ]+num[ j ] ),其中0<=j<i且num[ i ]>num[ j ],
这样就可以求出从开始到第i个元素,递增数列的和的最大值,最存在dp[ i ]中;
#include <bits/stdc++.h>using namespace std ;int dp[1005],a[1005];int n ;int main(){while(cin>>n,n){int max ;for(int i = 0 ; i < n ; i++){cin>>a[i];dp[i]=a[i];}for(int i = 1 ; i <n ; i++){for(int j =i-1;j>=0;j-- ){if(a[i]>a[j]&&dp[i]<dp[j]+a[i]){dp[i]=a[i]+dp[j];}}}max = -99999999999;for(int i = 0 ; i <n;i++){if(dp[i]>max){max=dp[i];}}cout<<max<<endl;}}
1 0
- HDU1087 【DP问题之最大递增子段和问题】
- 【dp专题1】hdu1087最大上升子段和 E
- HDU1087(递增子序列最大和)
- HDU1087 Super Jumping! Jumping! Jumping!(动态规划,最大递增子段和)
- hdu1087 - Super Jumping! Jumping! Jumping! (dp 求递增子序列的最大和)
- [DP]FJSDFZOJ 1386 最大连续子段和问题
- 最大子段和部分问题(DP)
- 【dp】最大子段和问题及其拓展
- 最大子段和问题(dp大法)
- HDU1024 DP的优化 最大M子段和问题
- 最大子段和问题
- 最大子段和问题
- 最大子段和问题
- 最大子段和问题
- 最大子段和问题
- 最大子段和问题
- 最大子段和问题
- 最大子段和问题
- cl.exe
- STM32F10X USART发送详解,测试无误
- 学习Python语言---If语句
- Ubuntu 程序开机启动设置
- 【吐槽】天赋不够 咖啡来凑
- HDU1087 【DP问题之最大递增子段和问题】
- android 仿QQ空间listview反弹效果
- Your First Apache Shiro Application
- 解决bs4在Python 3.5下出现“ImportError: cannot import name 'HTMLParseError'”错误
- please update to a more recent version, or set ANDROID_DAILY_OVERRIDE environment variable to "a8faa
- JFinal+ajaxfileupload实现图片的异步上传
- Codeforces Round #258 (Div. 2)——B. Sort the Array(STL-reverse)
- C语言基础知识总结
- Hadoop-hdfs和mapreduce学习笔记二