最大字段和问题
来源:互联网 发布:势不可挡网络剧百度云 编辑:程序博客网 时间:2024/06/05 18:22
/*最大字段和问题
以第i位数字结尾的最大字段和等于前一个字段和加上本身的值或者等于本身;
动态转移方程为:dp[i]=max(dp[i-1]+a[i],a[i]);
如 8,34,-67,98,3,5,-7,43
dp[0]=8;
因为dp[0]大于0,所以dp[1]=dp[0]+a[1];
因为dp[1]大于0,所以dp[2]=dp[1]+a[2];
因为dp[2]小于0,所以dp[3]=a[3];
因为dp[3]大于0,所以dp[4]=dp[3]+a[4];
因为dp[4]大于0,所以dp[5]=dp[4]+a[5];
因为dp[5]大于0,所以dp[6]=dp[5]+a[6];
因为dp[6]大于0,所以dp[7]=dp[6]+a[7];
*/
#include<iostream>
using namespace std;
int main(){
int a[8]={8,34,-67,98,3,5,-7,43};
int dp[8]={0},temp[8]={0};//dp数组中的dp[i]用来记录以数组a[i]结尾的最大字段和
dp[0]=a[0];
temp[0]=1; //temp数组用来标记 如果从第i个数开始的temp[i]=1;如果是连续的加temp[i]=2;
for(int i=1;i<8;i++){
if(dp[i-1]<0){
dp[i]=a[i];
temp[i]=1; //标记dp[i]=a[i]的位置
}
else{
dp[i]=dp[i-1]+a[i];
temp[i]=2; //标记dp[i]=dp[i-1]+a[i]的位置
}
}
int ttemp,mmax=dp[0];
for(int i=1;i<8;i++){
if(mmax<dp[i]){
mmax=dp[i]; //记录最大字段和
ttemp=i; //标记最大字段和的位置
}
}
cout<<mmax<<endl;
for(int i=ttemp;i>=0;i--){
if(temp[i]==1){
mmax=i; //记录最大字段和开始的位置
break;
}
}
for(int i=mmax;i<=ttemp;i++){
cout<<a[i]<<" ";
}
cout<<endl;
return 0;
}
以第i位数字结尾的最大字段和等于前一个字段和加上本身的值或者等于本身;
动态转移方程为:dp[i]=max(dp[i-1]+a[i],a[i]);
如 8,34,-67,98,3,5,-7,43
dp[0]=8;
因为dp[0]大于0,所以dp[1]=dp[0]+a[1];
因为dp[1]大于0,所以dp[2]=dp[1]+a[2];
因为dp[2]小于0,所以dp[3]=a[3];
因为dp[3]大于0,所以dp[4]=dp[3]+a[4];
因为dp[4]大于0,所以dp[5]=dp[4]+a[5];
因为dp[5]大于0,所以dp[6]=dp[5]+a[6];
因为dp[6]大于0,所以dp[7]=dp[6]+a[7];
*/
#include<iostream>
using namespace std;
int main(){
int a[8]={8,34,-67,98,3,5,-7,43};
int dp[8]={0},temp[8]={0};//dp数组中的dp[i]用来记录以数组a[i]结尾的最大字段和
dp[0]=a[0];
temp[0]=1; //temp数组用来标记 如果从第i个数开始的temp[i]=1;如果是连续的加temp[i]=2;
for(int i=1;i<8;i++){
if(dp[i-1]<0){
dp[i]=a[i];
temp[i]=1; //标记dp[i]=a[i]的位置
}
else{
dp[i]=dp[i-1]+a[i];
temp[i]=2; //标记dp[i]=dp[i-1]+a[i]的位置
}
}
int ttemp,mmax=dp[0];
for(int i=1;i<8;i++){
if(mmax<dp[i]){
mmax=dp[i]; //记录最大字段和
ttemp=i; //标记最大字段和的位置
}
}
cout<<mmax<<endl;
for(int i=ttemp;i>=0;i--){
if(temp[i]==1){
mmax=i; //记录最大字段和开始的位置
break;
}
}
for(int i=mmax;i<=ttemp;i++){
cout<<a[i]<<" ";
}
cout<<endl;
return 0;
}
0 0
- 最大字段和问题
- 最大字段和问题
- 最大字段和问题
- 最大字段和问题
- 最大字段和问题
- 最大字段和问题
- 最大字段和问题
- dp 最大字段和 问题
- 背包问题I--最大字段和
- 动态规划:最大字段和问题
- 动态规划之最大字段和问题
- 最大字段求和问题
- 数组问题之一维最大字段和问题<Java实现>
- 最大字段和问题 难点分析和C++实现9
- hdu1231 最大字段和
- 求最大字段和
- 最大字段和
- 最大子字段和
- hdoj-【5908 Abelian Period】
- Servlet常用接口
- Reverse Integer(EASY)
- Deferred Shading vs. Deferred Lighting
- [转]程序员如何快速准备面试中的算法
- 最大字段和问题
- 函数指针
- 解决ubuntu14.04下samba共享目录share点开弹出没有权限访问的问题
- 如何打造自己的coreseek/sphinx分词词库
- servlet简介
- jQuery 核心:选取元素
- 弱鸡的博客
- CoordinatorLayout+AppBarLayout+CollapsingToolbarLayout+ViewPager滑动效果,以及代码处理是否推动效果
- 《数据挖掘的数据集资源》