Max Sum(简单的最大子序列和的问题)
来源:互联网 发布:貂蝉网络剑三蘑菇助手 编辑:程序博客网 时间:2024/06/08 02:38
Description
Input
Output
Sample Input
25 6 -1 5 4 -77 0 6 -1 1 -6 7 -5
Sample Output
Case 1:14 1 4Case 2:7 1 6
题目大意:求所给序列的最大子序列之和,并求出该最大子序列的首位和末位的位置。
分析:开一个dp数组记录以每位数字结尾的最大子序列之和,比较求出最大的子序列之和,并记录该子序列结尾的
数字序号,从结尾数字向前累加,直到和等于求得的最大子序列之和,记录此时的数字序号,便是该最大子
序列的首位。
注意:1,在第二个样例中,0作为最大子序列的首位。
2,当最大子序列为一个数字时,首位与末位相同。
3,最后一组结果后不需要空行。
代码如下:
#include<iostream>
#include<algorithm>
#include<string.h>
#include<string>
#include<cstdio>
using namespace std;
int a[100005],dp[100005];
int main()
{
int i,j,k,n,t,mm,nn,st,en,sum;
scanf("%d",&t);
for(i=0;i<t;i++)
{
sum=0;
memset(dp,0,sizeof(dp));
scanf("%d",&n);
for(j=1;j<=n;j++)
scanf("%d",&a[j]);
dp[1]=a[1];
for(j=2;j<=n;j++)
{
if(a[j]+dp[j-1]>a[j])
dp[j]=a[j]+dp[j-1];
else
dp[j]=a[j];
}
mm=dp[1];
nn=1;
for(j=2;j<=n;j++)
{
if(dp[j]>mm)
{mm=dp[j];nn=j;}
}
if(mm==a[nn]&&(dp[nn-1]!=0||nn-1<1))
{st=nn;en=nn;}
else
{
en=nn;
sum=a[nn];
for(j=nn-1;j>=1;j--)
{
sum+=a[j];
if(sum==mm)
{
if(a[j-1]==0&&j-1>=1)
st=j-1;
else
st=j;
break;
}
}
}
printf("Case %d:\n",i+1);
printf("%d %d %d\n",mm,st,en);
if(t-i>1)
printf("\n");
}
getchar();
getchar();
return 0;
}
ps:第一次写博客,有错误望大家指出
- Max Sum(简单的最大子序列和的问题)
- HDU 1003 Max Sum 最大连续子序列的和
- HDU 1003 Max Sum (最大子序列的和)
- Max Sum 最大连续和的子序列
- Max Subsequence Sum 最大子序列和问题 O(NlogN)与O(N)算法的对比
- HDU1003 Max Sum 最大子序列和的问题【四种算法分析+实现】
- Max Sum hdu+最大子序列和
- Max sum 最大子序列和
- Max Sum 最大连续子序列和
- Max Sum—DP求连续子序列最大的和
- HDU ACM 1024 Max Sum Plus Plus ->最大连续子序列和的增强版
- 【杭电oj】1003 - Max Sum(最大子序列的和)
- HDU 3415 Max Sum of Max-K-sub-sequence(长度不超过k的最大连续子序列和,单调队列)
- (hdu step 3.2.1)Max Sum(简单dp:求最大子序列和、起点、终点)
- ACM:HDU-1003 Max Sum 最大子序列问题
- hduoj【1003】Max Sum【最大子串的和】
- HDU 1003 Max Sum(最大连续子序列和)
- hdu 1003 Max Sum (求最大子序列和)
- 关于数据结构的学习经验分享 (链表相关的内容)
- CodeForces-509B Painting Pebbles
- Android的听筒模式实现
- [-]boost python notes
- tree.py 模板
- Max Sum(简单的最大子序列和的问题)
- Fiddler https 证书问题
- HDU 5446 Unknown Treasure
- 简单的分析了fb_read函数。
- Android PorterDuff.Mode图形混合处理
- 排序算法-堆排序
- Android第八讲——多媒体(二)SoundPool 播放简短铃声
- 从一个页面跳转到另一个页面的指定位置(带平滑移动的效果)
- ES6详解四: WeakMap