| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 429 人关注过本帖
标题:在线处理求最大序列和
只看楼主 加入收藏
令狐少侠56
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:320
专家分:175
注 册:2014-4-10
结帖率:58.18%
收藏
 问题点数:0 回复次数:5 
在线处理求最大序列和
明天试试分治法,分治的话代码可能要难写一些
原题
图片附件: 游客没有浏览图片的权限,请 登录注册

程序代码:
#include<stdio.h>

int Compare(int CurArraySum,int MaxArraySum)
{
    if( CurArraySum > MaxArraySum )
        MaxArraySum=CurArraySum;

    return MaxArraySum;
}

int main()
{
    int Array[100000];
    int CurArraySum,MaxArraySum;
    int k,i;
    int book; //记录Array[]中负数的个数

    book=0;
    CurArraySum=0;
    MaxArraySum=-9999999;

    scanf("%d",&k);

    for(i=0;i<k;i++)
    {
        scanf("%d",&Array[i]);
    }

    //在线处理,扫描下一个数与最大和比较,当前和为负数则不将当前和记录至下一个数,重置后扫描
    for(i=0;i<k;i++)
    {
        if(Array[i]<0) book++; 

        if( CurArraySum<0 )
        {
            CurArraySum=0;
            CurArraySum+=Array[i];//重新扫描
            MaxArraySum = Compare( CurArraySum , MaxArraySum );
        }
        else 
        {
            CurArraySum+=Array[i];//虽然第一项为负数时会将其包含进CurArraySum,但是后会被重置为0,即使只有一项由于book的记录也会输出0
            MaxArraySum = Compare( CurArraySum , MaxArraySum );
        }
    }

    if(book==k)
        printf("0\n");
    else
        printf("%d\n",MaxArraySum);
return 0;
}



2015-10-23 21:57
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:0 
这不应该在这个版吧!好多求最大子系列的,我不懂什么算法名字,凭感觉写了下,不知道能否经过极限测试!
#include <stdio.h>
void main()
{
    int i,j,k,s,n,l,h,a[100000];
    scanf("%d",&n);
    for(i=0;i<n;i++)scanf("%d",&a[i]);
    k=0;l=0;h=0;
    for(i=0;i<n;i++)
    {
        for(j=i,s=0;j<n;j++)
        {
            s=s+a[j];
            if(s>k)
            {
                k=s;
                l=i;
                h=j;
            }
        }
    }
    printf("序号%d到%d的最大和为%d。\n",l,h,k);
}
测试数据运行结果如下:
6
-2 11 -4 13 -5 -2
序号1到3的最大和为20。

能编个毛线衣吗?
2015-10-23 23:29
令狐少侠56
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:320
专家分:175
注 册:2014-4-10
收藏
得分:0 
回复 2楼 wmf2014
我觉得直接给出代码不好。就在这个版写了。
2015-10-24 07:51
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:0 
我没有权限移帖子了!

用动态规划解决

[此贴子已经被作者于2015-10-24 08:29编辑过]



[fly]存在即是合理[/fly]
2015-10-24 08:23
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:0 
sum[n]表示以不大于n为起点,n为终点的最大子数和

sum[i] = max{sum[i-1]+a[i], a[i]}


[fly]存在即是合理[/fly]
2015-10-24 08:36
令狐少侠56
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:320
专家分:175
注 册:2014-4-10
收藏
得分:0 
回复 5楼 azzbcc
动态规划以前看过,还不会列转移方程。。
2015-10-24 18:10
快速回复:在线处理求最大序列和
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017074 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved