您的位置:首页 > 其它

动态规划——求最大子串和

2014-03-11 11:06 176 查看
输入一个整数n代表有几个数据,接着输入n个数据,求这n个数据组成的串中,子串和最大;

一道求最优解的动态规划问题。

dp[ i ] 表示与第i个数组合时,所能得到的最大值 ;

第n个数据(dp[ n ])有两种年可能:1、当 dp[n-1] < 0 时 ,自己独立成为一个长度为1的子串 ( dp[ n ] = a
) ;

   2、当 dp[n-1] >= 0 时 ,和dp[n-1]相加   (dp
= dp[ n-1 ] + a[ n ] ) ;

注意:dp
不代表前n个数据中最大子串和,只代表与第n个数组合时,所能得到的最大值。

#include<iostream>
using namespace std ;
int main() {
int n ;
cin >> n ;
int a[100] ;
int i = 1 ;
int m = -1000000;
for(; i <= n ; i++)
cin >> a[i] ;
int dp[100] = {0} ;
for(int j = 1 ; j <= n ; j++) {
if( dp[j-1] < 0 )
dp[j] = a[j] ;
else
dp[j] = dp[j-1] + a[j] ;
m = max(m,dp[j]);
}
cout << m << endl ;
return 0 ;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: