hdu5280dp
2015-07-12 16:23
183 查看
P必须修改
import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.io.StreamTokenizer; import java.math.BigInteger; import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator; import java.util.LinkedList; import java.util.PriorityQueue; import java.util.Queue; import java.util.Scanner; import java.util.Stack; import java.util.StringTokenizer; public class Main { public static void main(String[] args) throws IOException{ StreamTokenizer cin = new StreamTokenizer(new BufferedInputStream(System.in)); InputReader in = new InputReader(System.in) ; PrintWriter out = new PrintWriter(System.out) ; int t = in.nextInt() ; while((t--) > 0){ new Task().solve(in , out) ; // out.flush() ; } out.flush() ; } } class Task{ long[] a , dp1 , dp2 ; public void solve(InputReader in , PrintWriter out){ int n = in.nextInt() ; int p = in.nextInt() ; a = new long[n+2] ; dp1 = new long[n+2] ; dp2 = new long[n+2] ; for(int i = 1 ; i <= n ; i++) a[i] = in.nextLong() ; dp1[0] = 0 ; for(int i = 1 ; i <= n ; i++) dp1[i] = Math.max(dp1[i-1] + a[i], a[i]) ; dp2[n+1] = 0 ; for(int i = n ; i >= 1 ; i--) dp2[i] = Math.max(dp2[i+1] + a[i] , a[i]) ; long ans = Long.MIN_VALUE ; for(int i = 1 ; i <= n ; i++){ ans = Math.max(ans , Math.max(0 ,dp1[i-1]) + p + Math.max(0 , dp2[i+1]) ) ; } for(int i = 1 ; i < n ; i++) ans = Math.max(ans, dp1[i]) ; for(int i = 2 ; i <= n ; i++) ans = Math.max(ans, dp2[i]) ; out.println(ans) ; } } class InputReader{ public BufferedReader reader; public StringTokenizer tokenizer; public InputReader(InputStream stream){ reader = new BufferedReader(new InputStreamReader(stream), 32768); tokenizer = null; } public String next(){ while(tokenizer == null || !tokenizer.hasMoreTokens()){ try{ tokenizer = new StringTokenizer(reader.readLine()); }catch (IOException e) { throw new RuntimeException(e); } } return tokenizer.nextToken(); } public int nextInt() { return Integer.parseInt(next()); } public long nextLong() { return Long.parseLong(next()); } }
相关文章推荐
- 图解2015年初创企业风投资金走向趋势
- 这谈的数据结构和算法2好基友[数据结构和算法]
- MVC @functions
- C语言的设计模式-接口隔离
- JavaScript对象
- Android去掉标题栏和全屏
- UVA - 1366 Martian Mining 三维dp
- srtuts,spring连续删除的问题
- 快速定位软件的安装位置
- HMM-信道模型&前向算法
- Android开发:获取屏幕宽和高的两种方法(px、dip、分辨率之间的关系及px与dip互相转化)
- 23种设计模式之代理模式
- WINDBG !stacks
- 一个IT学生的personal statement
- openCV中waitKey函数介绍
- Android 屏幕(View)坐标系统
- android坐标
- linux学习总结之磁盘管理
- 使用HTML5的十大原因
- 辗转相除法