HDU1003 ---最大子序列和 subsequence
来源:互联网 发布:2016nba总决赛每场数据 编辑:程序博客网 时间:2024/05/17 03:43
这里的子序列指连续子序列
算法一。穷举 O(n^2) 序列规模较大时,非常耗时
max=a[1];for(i=1;i<=size;i++){ sum=0; for(j=i;j<=size;j++) { sum+=a[j]; if(sum>max) { max=sum;shou=i;last=j; } }}
算法二。 动态规划 O(n) 一个for循环即可解决
令dp[ j ]表示以 j 为终点的最大子段和。
子问题:要求dp[ j ] ,求出dp[ j-1]即可 ,依此类推,因此只要知道dp[ 1 ] ,就可求出dp[ j ]
dp[ j-1] >0 则dp[ j ]=dp[ j-1] + a[ j ]
dp[ j-1] <=0 则dp[ j ]=a[ j ] 最大子段和不可能以负数开头
for(j = 1; j <= n; j++) { if(dp[j-1]>0) { dp[j] = dp[j-1]+a[j]; } else{ dp[j] = a[j]; } if(dp[j]>max) max = dp[j]; }
将该思想用于本题,dp[ j ] 相当于sum
max=-1001;sum=0;shou=last=1; //若max=0 当序列全负时结果不正确(-1000<=ai<=1000)
for(i=1,j=1;i<=w;i++)
{ sum+=a[i];
if(sum>max)
{
max=sum;last=i;shou=j;
}
if(sum<0)
{ sum=0;
j=i+1; //和最大的子序列不可能以负数开头,shou向后推进一个
}
}
还可以用分治法 O(nlogn)
区间【shou,last】的所有可能情况就 3 种:shou在[1,n/2],last在[n/2+1,n]shou,last都在[1,n/2]shou,last都在[n/2+1,n]
- HDU1003 ---最大子序列和 subsequence
- hdu1003最大子序列和
- HDU1003-最大子序列和
- HDU1003 最大子序列和问题
- hdu1003 最大连续子序列和
- HDU1003(最大连续子序列和DP)
- hdu1003 最大子序列的和
- HDU1003最大连续子序列和
- hdu1003求最大和子序列
- hdu1003最大和序列
- hdu1003求最大子序列
- hdu1003 最大连续子序列
- HDU1003--最大连续子序列
- 线性时间求解最大子序列和——HDU1003
- hdu1003 Max Sum(DP之最大子序列和)
- Max Sum(HDU1003)最大连续子序列和
- HDU1003 Max Sum(动态规划,最大子序列和)
- 动态规划:HDU1003-Max Sum(最大子序列和)
- Steve Jobs (1955 - 2011)
- 彩色的命令行 —— 使用 ANSI 色彩代码
- HDU-1058 堆
- android的sax解析XML文档
- 2007年百度之星程序设计大赛试题初赛题目-题4-百度时间
- HDU1003 ---最大子序列和 subsequence
- VC switch case
- 从C#开发人员到Windows Phone 7高级开发人员只需3周
- [T1 Silverlight Training] Day 1
- Windows Phone 7开发必备工具
- Linux C : 登录密码星号 * 显示,包含能回退 backspace
- JS使用split分割字符串并应用正则匹配
- 关于安卓自定义控件的案例
- 求教正则表达式!!!!!