[rqnoj145]打水漂
2015-06-14 15:43
375 查看
题目描述:
君不知,打靶大牛goleenuoer可喜欢打水漂了,他的靶子可以打到河面上的任何一条鱼,可是他的水漂打得实在是烂,无论怎么打那石子只会在河面上跳跃两次就“扑通”了.这天他又来打了.这条宽w米,每隔一米都会有一条鱼,每条鱼都有它的美观值.他想知道如何打才能得到两条鱼之间最大的美观值总和.刚接触OI的他想请您来解答,您能帮助他吗???输入格式
输入文件包含n+1个整数,第一行为一个整数n(n<=10000).从第二行工n个数,第i个整数表示第i条鱼的美观值范(围为-500..500).当所有整数都为负数时输出0.输出格式
输出文件包含两行,第一行为石子的起点和落点,用空格隔开.第二行为一个整数表示所得到的两条鱼之间美观值总和.样例输入
105 8 -5 -10 5 1 -3 2 4 2
样例输出
0 213
最大子段和
var x:array[0..10000]of longint; dp:array[0..10000,0..1]of longint; i,n,max,t:longint; begin readln(n); for i:=1 to n do read(x[i]); dp[1,0]:=1; dp[1,1]:=x[1]; for i:=2 to n do if dp[i-1,1]+x[i]>x[i] then begin dp[i,1]:=dp[i-1,1]+x[i]; dp[i,0]:=dp[i-1,0]; end else begin dp[i,1]:=x[i]; dp[i,0]:=i; end; max:=0; for i:=1 to n do if dp[i,1]>max then begin max:=dp[i,1]; t:=i; end; if max=0 then writeln(0) else begin writeln(dp[t,0],' ',t); writeln(dp[t,1]); end; end.
枚举前缀和
var s,x:array[0..10000]of longint; i,j,ans,a,b,n:longint; begin readln(n); for i:=1 to n do begin read(x[i]); s[i]:=s[i-1]+x[i]; end; ans:=0; a:=0; b:=0; for i:=1 to n do for j:=i+1 to n do if s[j]-s[i-1]>ans then begin ans:=s[j]-s[i-1]; a:=i; b:=j; end; if ans=0 then writeln(0) else begin writeln(a,' ',b); writeln(ans); end; end.
相关文章推荐
- Android 获取View的高度和宽度
- MAVEN私服搭建
- Android.mk的用法和基础学习-----阿冬专栏
- String BuffferedReader和sacnner
- C++学习一
- 面向对象程序设计
- 使用 stretchableImageWithLeftCapWidth 方法实现可伸缩图片
- 电脑断网2个星期
- linux学习笔记一(1~7章节)
- Uva - 210 - Concurrency Simulator
- Uva - 210 - Concurrency Simulator
- 一起talk C栗子吧(第十六回:C语言实例--栈一)
- python开发微信公众平台 BAE
- MySQL函数简介
- (笔试题)不用除法操作符,实现两个正整数的除法
- 基于C语言EOF与getchar()的使用详解
- Android Color的定义以及color.xml的使用
- LeetCode之“字符串”:Valid Palindrome
- CSS强制换行和禁止换行代码
- 结束端口号的命令