zoukankan      html  css  js  c++  java
  • hdoj1003-Max Sum(数组的最大和)

    ##### 思路
    题目的大致意思就是求有最大和的子序列,我的方法是边读取数据边处理,当和出现为负值是记录当前点的前一个为右端点,当和大于最大值是更新左右端点; 特别要注意的是数据可能全为负,因此max的值应初始化为负值。
    ##### code
    #include <iostream>
    #include <fstream>
    using namespace std;
    int main() {
        int t;
        cin >> t;
        int count = 1;
        while(t --) {
            int n;
            cin >> n;
            int l = 0, l1 = 0, r = 0,  sum = 0, r1 = 0, max = -1005;               //数组有可能全为负,max初始值为负值
    
            for(int i = 0; i < n; i ++) {
                int temp;
                cin >> temp;
                sum += temp;
                if(sum > max) {      //出现最大值时更新右端点
                    l = l1;
                    r1 = i;
                    max = sum;
                }
                else if(sum < 0) {     //当当前和为负数时,更新左端点
                    sum = 0;
                    l1 = i + 1;
                }
            }
            if(count > 1) {
                cout << endl;
            }
            cout << "Case " << count++ << ":" << endl;
            cout << max << " " << l+1 << " " << r1+1 << endl;
        }
        return 0;
    }
    

      

  • 相关阅读:
    html语法
    mysql常见的使用语法
    文件相关命令
    linux文件管理
    mysql常见名词解释
    MySQL初识
    文件管理
    并发基础知识3
    Bash shell初识
    【Spring Boot】ActiveMQ 发布/订阅消息模式介绍
  • 原文地址:https://www.cnblogs.com/topk/p/6580120.html
Copyright © 2011-2022 走看看