【openjudge】最大总和
来源:互联网 发布:linux 命令行 r 编辑:程序博客网 时间:2024/05/16 11:51
1481:最大总和
总时间限制: 1000ms
内存限制: 65536kB
如果有想看英文版的同学,轻击英文版,如果有想看源代码的同学,轻击源代码。
描述
给定一组n个整数:A、A1、A2、……},我们定义一个函数d(a)如下:
t1 t2 d(A) = max{ ∑ai + ∑aj | 1 <= s1 <= t1 < s2 <= t2 <= n } i=s1 j=s2
你的任务是计算D(a)。
输入
输入包含t(< = 30)测试用例。测试用例(t)的数目在输入的第一行中给出。
每个测试用例包含两行。第一行是整数n(2 < = n=50000)。第二行包含n个整数:A1,A2,。(| AI | <= 10000)。后有每一种情况下,一个空行。
输出
每一个测试用例只打印一行。该行应包含整数d(a)。
样例输入
1101 -1 2 2 3 -3 4 -4 5 -5
样例输出
13
提示
在样本中,我们选择{ 2,2,3,- 3 }和{ 5 },然后我们就可以得到答案。
巨大的输入,同时注意。
来源
poj的较量,作者:Mathematica @爱
【解析】+【代码】
#include<cstring>#include<iostream>#include<algorithm>using namespace std;int n,nmax,a[50001],f[50001],g[50001],F[50001],G[50001];int main(){ int t; cin>>t; while(t--) { nmax=-10001; cin>>n>>a[1]; int mxf=F[1]=f[1]=a[1];//统一开头 for(int i=2;i<=n;i++)//两段for,分别从前后检查 { cin>>a[i]; f[i]=a[i]+max(0,f[i-1]);//加上前面一个的数,如果是负数,就不加 mxf=F[i]=max(mxf,f[i]);//储存最大f[] } int mxg=G[n]=g[n]=a[n];//统一g[]结尾 for(int i=n-1;i>0;i--)//不能包含n { g[i]=a[i]+max(0,g[i+1]);//储存最大(加上后一个数(如果不为负)) G[i]=max(mxg,g[i]); mxg=G[i]; } for(int i=1;i<n;i++) if(F[i]+G[i+1]>nmax) nmax=F[i]+G[i+1]; cout<<nmax<<endl; }}
阅读全文
0 0
- 【openjudge】最大总和
- 最大总和
- HDU1003-最大总和-DP
- 【Openjudge】字符串最大跨距
- Openjudge 8782 乘积最大
- Openjudge 字符串最大跨距
- OpenJudge 2766 最大子矩阵
- 【原创】【OpenJudge】8782:乘积最大
- 元素总和最大的子矩阵
- [OpenJudge-NOI]乘积最大的拆分
- [OpenJudge-NOI]最大子矩阵 贪心
- 【openjudge】最大上升子序列和
- 【DP】 noi openjudge 2.6 乘积最大
- OpenJudge 2.5-1481 Maximum sum(最大和)
- 【openjudge】最大上升子序列和
- 王朝 鸡兔同笼求鸡兔总和最大最小问题
- 路径所经过的数字的最大的总和
- OpenJudge
- Vue前后台交互
- Groovy 循环
- SSM+maven整合及模板
- 数据库SQL优化大总结
- 剑指offer 01 二维数组中的查找
- 【openjudge】最大总和
- CURL POST 数据
- 集中式vs分布式
- Linux配置使用SSH Key登录并禁用root密码登录
- ofstream 的一点疑问
- 解决手机端文字表现大小不一致问题
- git的使用基本方法以及理解
- 根据浏览器语言自动切换多语言站点 Star.hou
- 断点调试