最优子序列求和DP算法(效率较高)
2016-01-15 00:00
148 查看
首次接触了一些有关dp算法的题型,开始还有点思路,但在编程的过程当中遇到了些障碍,经过一番辛苦搜索,最后,总算是把最优子序列的算法给想明白了。
int maxSubSum4( const vector<int> & a )
{
int maxSum = 0, thisSum = 0;
for( int j = 0; j < a.size( ); j++ )
{
thisSum += a[ j ];//求一段子序列的和
if( thisSum > maxSum )//验证该段子序列是否是所求的最大和,即最大和非负或者为最大负数
maxSum = thisSum;
else if( thisSum < 0 )
thisSum = 0;//任何负的子序列不可能是最优子序列的前缀(需要做题慢慢体会)
}
return maxSum;
}
hdu1003
(注:涉及到DP算法的问题还有很多,我会在以后的学习当中逐步加以补充的)
int maxSubSum4( const vector<int> & a )
{
int maxSum = 0, thisSum = 0;
for( int j = 0; j < a.size( ); j++ )
{
thisSum += a[ j ];//求一段子序列的和
if( thisSum > maxSum )//验证该段子序列是否是所求的最大和,即最大和非负或者为最大负数
maxSum = thisSum;
else if( thisSum < 0 )
thisSum = 0;//任何负的子序列不可能是最优子序列的前缀(需要做题慢慢体会)
}
return maxSum;
}
hdu1003
1 #include " iostream " 2 using namespace std; 3 int main() 4 { 5 int n,m,a,i,j = 0 ; 6 cin >> n; 7 while (n) 8 { 9 cin >> m; 10 int sum = 0 ,k = 0 ,max =- 99999999 ,start = 0 ,end = 0 ; 11 for (i = 0 ;i < m;i ++ ) 12 { 13 cin >> a; 14 sum += a; 15 if (sum > max) 16 { 17 max = sum; 18 start = k + 1 ; 19 end = i + 1 ; 20 21 } 22 23 if (sum < 0 ) { sum = 0 ; k = i + 1 ;} 24 } 25 26 cout << " Case " << " " <<++ j << " : " << endl; 27 cout << max << " " << start << " " << end << endl; 28 if (n > 1 ) cout << endl; 29 n -- ; 30 } 31 return 0 ; 32 }
(注:涉及到DP算法的问题还有很多,我会在以后的学习当中逐步加以补充的)
相关文章推荐
- (六)hadoop系列之__hadoop分布式集群环境搭建
- poj1423
- PS制作圆角透明图片
- poj1316(非打表)
- 百度地图生产工具
- hdu2707
- poj1458(LCS)
- structure
- C#基础知识(以宝马,车,车轮为例)
- 前n项和!
- 拓扑排序(1)
- 《麦肯锡入职培训第一课》读书感悟
- Residual Networks <2015 ICCV, ImageNet 图像分类Top1>
- 启动图&图标
- dp(题型小结)
- linux之shell脚本学习篇一
- 社会要反思:高三学生学校坠亡 当天曾致电父亲称压力大
- 【转】别人整理的DP大全
- 链表的删除(3)
- (五)磁盘存储空间的管理