博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
dp经典问题-最大连续子序列和 hdu1003
阅读量:5308 次
发布时间:2019-06-14

本文共 1324 字,大约阅读时间需要 4 分钟。

题目描述:

这道题我先后做过三遍,结果每一遍都没有做出来。今天再仔仔细细的研究了一下,才发现用动态规划更好理解。

关于求最大连续子序列和的博文转载如下:

最大连续子序列和的特点就是这个和一定比它的子序列中任何一个数要大,所以就有了判断条件。

已知一序列:把数列第一个数存入dp[0],从第一个数开始遍历,用一个dp数组去存两数之间的最大子序列和,因此得出动态转移方程式dp[i]=max(dp[i-1]+a[i],a[i]);

代码实现:

#include 
#include
using namespace std;int a[100001],dp[100001];int main(){ int T,n,i=0; scanf("%d",&T); while(T--) { scanf("%d",&n); for(int i=0;i
=a[i]) //判断条件 { dp[i] = dp[i-1]+a[i]; end = i; } else//如果最长子序列和比a[i]还小,那么就从当前a[i]开始重新遍历 { dp[i] = a[i]; start = end = i; } if(max

另一个改进的版本:

#include
#include
using namespace std;int main(){ int t,n,a[100010],Case=1; int thissum,maxsum,begin,end,postion; cin>>t; while(t--){ cin>>n; for(int i=0; i
>a[i]; thissum=maxsum=a[0]; begin=end=postion=0; for(int i=1; i
maxsum){ maxsum=thissum; begin=postion; end=i; } } printf("Case %d:\n%d %d %d\n",Case++,maxsum,begin+1,end+1); } return 0;}

 

转载于:https://www.cnblogs.com/LJHAHA/p/10017221.html

你可能感兴趣的文章
初始面向对象
查看>>
docker一键安装
查看>>
leetcode Letter Combinations of a Phone Number
查看>>
Unity 5.4 测试版本新特性---因吹丝停
查看>>
7.5 文件操作
查看>>
DFS-hdu-2821-Pusher
查看>>
MyEclipse中将普通Java项目convert(转化)为Maven项目
查看>>
node js 安装.node-gyp/8.9.4 权限 无法访问
查看>>
windows基本命令
查看>>
VMware中CentOS设置静态IP
查看>>
[poj1006]Biorhythms
查看>>
jsp
查看>>
Hyper-V虚拟机上安装一个图形界面的Linux系统
查看>>
Hover功能
查看>>
js千分位处理
查看>>
Mac---------三指拖移
查看>>
关于VMare中安装Ubuntu的一些说明
查看>>
字符串类型的相互转换
查看>>
HTTP状态码
查看>>
iOS如何过滤掉文本中特殊字符
查看>>