poj-2479 Maximum sum
来源:互联网 发布:网络信息推广发布 编辑:程序博客网 时间:2024/04/30 15:25
题目传送门:http://poj.org/problem?id=2479
此题是比较经典的动规题,left[]是从左到右的最大和,right[]是从右到左的最大和。最后左右相加判断最大值即可。
详细解释:
left[i]存的是从0到i的最大和,如果left[i]的值为负,那么left[i + 1]的值为a[i + 1],否则在此基础上加上left[i],因为如果left[i]为负的话,left[i + 1]加上一个负数就会减小最优值。right相同。
下面是代码:
#include <iostream>#include <cstdio>#include <algorithm>using namespace std;int a[50001], left_[50001], right_[50001];int main(){ios::sync_with_stdio(false);cin.tie(0);int t;cin >> t;while (t--){int n;scanf("%d", &n);for (int i = 0; i < n; i++)scanf("%d", &a[i]);left_[0] = a[0];for (int i = 1; i < n; i++){if (left_[i - 1] < 0)left_[i] = a[i];elseleft_[i] = left_[i - 1] + a[i];}for (int i = 1; i < n; i++)left_[i] = max(left_[i], left_[i - 1]);right_[n - 1] = a[n - 1];for (int j = n - 2; j >= 0; j--){if (right_[j + 1] < 0)right_[j] = a[j];elseright_[j] = right_[j + 1] + a[j];}for (int i = n - 2; i >= 0; i--)right_[i] = max(right_[i + 1], right_[i]);int res = -100000000;for (int i = 1; i < n; i++)res = max(res, left_[i - 1] + right_[i]);cout << res << endl;}return 0;}
0 0
- poj 2479 Maximum sum
- POJ 2479 Maximum sum
- POJ 2479 Maximum sum
- POJ 2479 Maximum sum
- poj 2479 Maximum sum
- Poj 2479 Maximum sum
- POJ-2479-Maximum sum
- POJ 2479 Maximum sum
- poj 2479 Maximum sum
- poj 2479 Maximum sum
- poj 2479 Maximum sum
- POJ 2479 Maximum sum
- POJ 2479 Maximum sum
- POJ 2479 Maximum sum
- poj 2479 - Maximum sum
- POJ 2479 Maximum sum
- POJ 2479 Maximum sum
- poj-2479 Maximum sum
- C语言 VS GO语言
- Spring 系列,第 2 部分: 当 Hibernate 遇上 Spring
- C++超基础:STL
- android - NDK 小tips
- 宁夏哪里有找富婆包养男人?
- poj-2479 Maximum sum
- Vivado IP核剖析
- Spring中List、Set、Map、数组注入方式中标签的使用
- 宁波哪里有找富婆包养男人?
- Apache和Nginx 重写服务器规则
- Lectra.Prospinvarsalis.v2R2C1-ISO 1CD
- Lectra.Pro.Style.v5r3c1 1CD
- Django开发中整合新浪微博API
- IT行业智力测试题