动态规划——求最大子串和
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 ;
}
一道求最优解的动态规划问题。
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 ;
}
相关文章推荐
- eclipse中查找和去除不正确的标签
- 判断一个文件夹下的txt文件内部字符串 和另外一个txt每一行的字符串比较得到的内容
- 析构函数报错
- 在项目中使用Struts2的基本步骤
- Selenium私房菜系列0 -- Selenium前言
- iOS App 自定义 URL Scheme 设计
- rman备份命令
- iOS通知栏磨砂透明背景的代码实现(高斯模糊)
- struts 学习笔记(二)类型转化
- 关于双向链表之插入+删除
- web.xml设置全局变量
- C++代码注释规范(整理)
- Catch That Cow BFS
- java23种设计模式--桥接模式(bridge)
- “Java欢迎你”
- Centos PXE网络安装系统
- 我的linux博客
- ALSA-lib/utils 编译移植 及 问题解决
- 【示例】《Java程序设计》第二周博文:第二周 计算圆面积
- MySQL 5.5 分区性能测试之索引使用情况