zoukankan      html  css  js  c++  java
  • 1007_Maximum Subsequence Sum (25分)[动态规划/最大和子序列]

    题意: 输出子序列的最大和以及子序列的首尾元素.如果存在多个最大和子序列取位置最靠左的那个.如果序列元素全<0,和为0,输出给定序列的首尾元素.

     1 #include<iostream>
     2 #include<vector>
     3 #include<queue>
     4 #include<map>
     5 #include<set>
     6 #include<cmath>
     7 #include<cstdio>
     8 #include<cstdlib>
     9 #include<cstring>
    10 #include<algorithm>
    11 using namespace std;
    12 
    13 const int maxLen = 10000 + 10;
    14 int val[maxLen], dp[maxLen], front[maxLen], N, maxSum, maxR;
    15 
    16 int main()
    17 {
    18     cin >> N;
    19     memset(dp, 0, sizeof(dp));
    20     memset(val, 0, sizeof(val));
    21     memset(front, 0, sizeof(front));
    22     for (int i = 0; i < N; i++) {
    23         cin >> val[i];
    24         dp[i] = val[i];
    25         front[i] = i;
    26     }
    27     maxSum = dp[0]; maxR = 0; //初始化
    28     for (int i = 1; i < N; i++) {
    29         if (dp[i - 1] >= 0) { //动态规划
    30             dp[i] = dp[i] + dp[i - 1];
    31             front[i] = front[i - 1];
    32         }
    33         if (dp[i] > maxSum) { //记录:最靠左的最大子序列
    34             maxSum = dp[i];
    35             maxR = i;
    36         }
    37     }
    38     if (maxSum < 0) {
    39         cout << 0 << " " << val[0] << " " << val[N - 1] << endl;
    40     }
    41     else {
    42         cout << maxSum << " " << val[front[maxR]] << " " << val[maxR] << endl;
    43     }
    44     return 0;
    45 }
  • 相关阅读:
    开源项目
    引入CSS的三种方式
    Android打开数据库读取数据
    每日日报2020.10.16 1905
    课程2 1905
    每日日报2020.10.13 1905
    每日日报2020.10.15 1905
    每日日报2020.10.8 1905
    每日日报2020.10.9 1905
    每日日报2020.10.12 1905
  • 原文地址:https://www.cnblogs.com/NiBosS/p/12102484.html
Copyright © 2011-2022 走看看