杭电ACM1003

杭电ACM1003

其实就是简单的子串序列和为最大值的问题,这里采用动态规划法解决这个问题,代码如下:

#include <iostream>

using namespace std;

int main()
{
    int T, N, sum, max, a, i, j, l, z, r;
    cin >> T;
    for(i = 0; i < T; i++)
    {
        cin >> N;
        for(l = z = r = sum = 0, max = -1001, j = 0; j < N; j++)
        {
            cin >> a;
            sum += a;
            if(max < sum)
            {
                l = z;
                r = j;
                max = sum;
            }
            if(sum < 0)
            {
                z = j + 1;
                sum = 0;
            }
        }
        cout << "Case " << i + 1 << ":" << endl;
        cout <<max << " " << l + 1 << " " << r + 1 << endl;
        if(i < T - 1)
            cout << endl;
    }
    return 0;
}

唯一可能有疑问的是为什么max的初始值要设为-1001,这是因为题目要求是N的取值范围是-1000 ~ 1000,所以在这里取max最大值为-1001。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,915评论 18 139
  • php.ini设置,上传大文件: post_max_size = 128Mupload_max_filesize ...
    bycall阅读 6,829评论 3 64
  • 敏感的“像个女生”,一点点风吹草动就能让你思绪万千;一些些误会就能让你假装变的洒脱;一小小巧合就能让你怀疑世界; ...
    SHY_BOY121阅读 497评论 0 1
  • 刚谈恋爱那会,我们异地。我起的比你早,每次都是我吃完早餐,给你发条短信:记得吃早饭哦。那时候,你吃你的早餐,我吃我...
    鲍滨阅读 351评论 0 1
  • 1 最近「 时间管理 」特别火,相关的书和课程卖得不错,这方面的文章也是满天飞,可见人们是多么缺时间。 我第一次系...
    图丁Glax阅读 708评论 0 2