码迷,mamicode.com
首页 > 其他好文 > 详细

HDU 1024 解题思路

时间:2017-09-27 20:44:54      阅读:154      评论:0      收藏:0      [点我收藏+]

标签:思路   数组   解题思路   最大   维数   nbsp   数据   实现   hdu   

题目:

给出S1,S2。。。。Sn,这一个序列,把这个序列分成m段,使这m段的和最大,求出这个最大值是多少

思路:

很明显的dp问题,画一个表格(代表二维数组dp),dp[i][j]表示 :前j个数字分成i段的序列和最大是多少。

对于任意的 i , j , dp[i][j] 的值无非取两种:

第一种:前j-1个数字分成i组 , 就已经最大了,那么就取dp[i][j-1](当然i<j,如果i=j就是第二种情况了),这是不取第j个数字的情况,表达式为:dp[ i ][ j ] = dp[ i ][ j -  1]

第二种:如果取第j个数字作为单独一组,那么就要从前 j 个数字中找出 i-1组(因为第j个数字单独作为一组,那么前面就要有i-1组),取前 j 个数字中如果分成 i - 1 组 中最大的,再加上当前数字,那么就是当前dp[ i ][ j ]的值。表达式就是dp[ i ][ j ] = dp[ i - 1 ] [ k ] + a[ j ](其中k从 i 到  j )

 

所以综上所述, 最后的表达式就是 dp[ i ][ j ]  =  Max( dp[ i ][ j - 1] ,dp[ i - 1 ] [ k ] + a[ j ] ),如果考虑代码实现,因为题目中的数据量比较大,所以在实现的时候需要进一步优化,代码稍长,就不在这里粘贴了。

望共勉。。

HDU 1024 解题思路

标签:思路   数组   解题思路   最大   维数   nbsp   数据   实现   hdu   

原文地址:http://www.cnblogs.com/dqsBK/p/7603332.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!