NOJ2045 罗马PK
来源:互联网 发布:php 二维数组去重复 编辑:程序博客网 时间:2024/06/02 11:06
题目链接:点击打开链接
罗马PK
时间限制(普通/Java) : 1000 MS/ 2000 MS 运行内存限制 : 65536 KByte
总提交 : 196 测试通过 : 49
总提交 : 196 测试通过 : 49
比赛描述
一天,机智的罗老师和小马哥想比试以下到底谁更机智,于是他们找到了一个很长的数列串,决定看谁能更快地算出这条长串中子串和的最大值。
这对于身经百战的神牛们通过编程来求解真是小菜一碟,现在想请你帮他们算出正确结果。
eg.长串为(6,-1,5,4,-7),那么子串的最大值为:
6+(-1)+5+4=14
输入
输入的第一行包含一个整数T(1<=T<=20)表示测试用例的数目。接下来有T行输入,每行以一个数N(1<=N<=100000)开头,然后接下来输入N个整数(所有的整数都在-1000到1000之间)。
输出
对于每个测试用例,你应该输出2行。第一行是 "Case #:",#表示测试用例数。第二行包含3个整数,子串和的最大值,对应字串的开始位置,对应字串的结束位置。如果有超过一个的答案,输出第一个。每两个测试用例之间有一个空白行。
样例输入
2
5 6 -1 5 4 -7
7 0 6 -1 1 -6 7 -5
样例输出
Case 1:
14 1 4
Case 2:
7 1 6
解:最大连续和,和pat1007很像,自己顺便把这道题也写了,PS:这题数据出的比较水。代码:
#include<iostream>#include<cstdlib>#include<cstdio>using namespace std;int main(){ int t; while(scanf("%d",&t)==1) { for(int k=1;k<=t;k++) { int n; scanf("%d",&n); int *a=new int[n+1]; for(int i=0;i<n;i++) { scanf("%d",&a[i]); } int flag=0,left=0,right=0,sum=0,cursum=0; for(int i=0;i<n;i++) { if(cursum<0) { cursum=a[i]; flag=i; } else { cursum+=a[i]; } if(cursum>sum) { sum=cursum; left=flag; right=i; } } printf("Case %d:\n",k); printf("%d %d %d\n",sum,left+1,right+1); if(k!=t) printf("\n"); } }}
0 0
- NOJ2045 罗马PK
- 南邮 OJ 2045 罗马PK
- 罗马,罗马!
- NOJ 2045 罗马PK (线性dp 最大连续子段和)
- 罗马VS尤文前瞻:红狼防线堪忧 王子PK或成绝唱 新援或成关键 技术流对决
- 罗马历史记录
- 罗马假日
- 罗马假日
- 罗马字母表
- 《罗马假日》
- 整数转罗马和罗马转整数
- 罗马数表示整数
- 建立我的罗马
- 巴萨挺进罗马!!!!
- 罗马字符及其发音
- 条条大道通罗马
- 罗马计数法
- 简单日文罗马音
- AppStoreDemo
- UVa10129 判断有向图中是否存在欧拉回路
- A - Two Semiknights Meet
- ACM中的java
- java小程序查看器
- NOJ2045 罗马PK
- ListView实现下拉刷新,分页显示(案例源码)
- linux中mmap文件到内存中,该进程发生错误被挂掉后mmap映射的内存能否写回到文件中的问题
- A Lot of Joy-Gym 100187B
- JAVA用户自定义事件监听完整例子
- Android 技巧 - 取得当前活动的activity的class name / package name
- 绘图.java(小程序查看器)
- 【学习笔记】Linux的命令总结(三)
- Asp.mvc(三) ~ 使用 Autofac 实现依赖注入