问题描述

现在我认为你已经在Ignatius.L的“最大总和”问题中得到了AC。为了成为一名勇敢的ACMer,我们总是向更难挑战的问题挑战自我。现在你面临着一个更困难的问题。

给定连续的数字序列S1,S2,S3,S4 … Sx,… Sn(1≤x≤n≤1,000,000,-32768≤Sx≤32767)。我们定义了函数和(i,j)= Si … Sj(1≤i≤j≤n)。

现在给定一个整数m(m> 0),你的任务是找到m对i和j,它们使sum(i1,j1) sum(i2,j2) sum(i3,j3) … sum (im,jm)maximal(ix≤iy≤jx或者ix≤jy≤jx是不允许的)。

但我很懒惰,我不想写一个专门的判断器模块,所以你不必输出m对i和j,只输出sum(ix,jx)的最大和(1≤x ≤m)。 ^ _ ^

输入

每个测试用例将以两个整数m和n开始,随后是n个整数S1,S2,S3 … Sn。

处理到文件的结尾。

产量

在一行中输出上述最大和。

示例输入

1 3 1 2 3

2 6 -1 4 -2 3 -2 3

示例输出

6

8

这题刚开始不明白,后来看了别人的思路。用dp[m][n]自己做出来但是数组太大,后来又继续学习,发现人家把多维的压缩成二维,看了好久才看明白。。

首先 value[i][j]表示以第j个元素结尾的i对最大,(dp经常处理的是以谁为结尾)

dp[i][j]表示第j元素中要求的最大。

i>j时:

value[i][j] = max( value[i][j-1] a[j], max( value[i-1][t] (i-1<=t <= j-1) a[j]))可以理解。

简单而说value[i][j] = max(i对以第j-1结尾 a[j],i-1对前j-1个找最大 a[j]);(直接接上,和最后一个单独取)

那么 value[i][j]=max(value[i][j-1] a[j],dp[i-1][j-1] a[j]);

然而 dp[i][j]=max(以第j个结尾的最大,不以第j个结尾)。

可以表示为:dp[i][j]=max(value[i][j],dp[i][j-1])

最终得到方程组:

value[i][j]=max(value[i][j-1] a[j],dp[i-1][j-1] a[j]);

dp[i][j]=max(value[i][j],dp[i][j-1]) ;

dp[i][j]只和当前的 dp[i][]和 value[i][]有关,和前面的数据无关,而value[i][]只和value[i][]和dp[i-1][]有关,可以想一下,每一次i循环,我求这组的数据value要重新赋值,并且和dp[i][]层,和dp[i-1][]层有关,那么我就可以直接用value[j]表示当前i层的以j为结尾的最大。同理第i层的dp求要用到前面的dp[i][]和上一层的dp[i-1][];那么可以简写为 dp[i%2][j]表示当前i的以j之中的最大。

简写为:

value[j]=max(value[j-1] a[j],dp[(i-1)%][j-1] a[j]);

dp[i%2][j]=max(value[j],dp[i%2][j-1]) ;

打个比方:爸爸妈妈儿子女儿洗澡,一个人要一个桶泡,你有钱可以买四个桶一人一个洗澡,你没钱就爸爸先用,然后妈妈,女儿,儿子用。

附上代码如下:

import java.util.Scanner;

public class 杭电1024 {

public static void main(String[] args) { Scanner sc=new Scanner(System.in); while(sc.hasNext()) { int m=sc.nextInt();//对数 int n=sc.nextInt();//元素个数 int a[]=new int[n 1];//元素值 int dp[][]=new int[2][n 1]; int value[]=new int[n 1]; int q=0;int max=0; for(int i=1;ii) { value[j]=max(dp[(i-1)%2][j-1] a[j],value[j-1] a[j]);// dp[i%2][j]=max(dp[i%2][j-1],value[j]);// } } } System.out.println(dp[m%2][n]); }

}

private static int max(int i, int value) { return i>value?i:value;

}

}1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

文章来源: bigsai.blog.csdn.net,作者:Big sai,版权归原作者所有,如需转载,请联系作者。

原文链接:bigsai.blog.csdn.net/article/details/79628860

java max sum_杭电1024 Max Sum Plus Plus状压dp(java)相关推荐

  1. 杭电1024 Max Sum Plus Plus状压dp(java)

    问题描述 现在我认为你已经在Ignatius.L的"最大总和"问题中得到了AC.为了成为一名勇敢的ACMer,我们总是向更难挑战的问题挑战自我.现在你面临着一个更困难的问题. 给定 ...

  2. CF1463F Max Correct Set(取小样法+状压 DP)

    CF1463F Max Correct Set 要求选出集合 \(U=\{1,2,3,\dots,n\}\) 的一个子集 \(S\),满足:如果 \(a \in S\) 并且 \(b \in S\), ...

  3. Gym - 101853E E. Maximum Sum (状压DP)

    原题地址:https://codeforces.com/gym/101853/problem/E 题意:给出一个n*n的矩阵,矩阵中每一个格子都有一个权值,选择一个格子就能拿到当前的权值,但是同时就不 ...

  4. 用java爬取杭电oj已ac代码

    前言 电脑的硬盘突然坏了,新安装的eclipse的代码全没了,后来发现杭电上已经ac的代码可以查看到,我是个有强迫症的人,我宁愿做很多件不同的事也不愿意做一件相同的事(复制黏贴)许多次,所以就突发奇想 ...

  5. 杭电acm2151题java的解法,杭电ACM题型分类

    杭电ACM题型分类 基础题:1000.1001.1004.1005.1008.1012.1013.1014.1017.1019.1021.1028.1029.1032.1037.1040.1048.1 ...

  6. 【ACM】杭电OJ 4704 Sum (隔板原理+组合数求和公式+费马小定理+快速幂)

    http://acm.hdu.edu.cn/showproblem.php?pid=4704 1.隔板原理 1~N有N个元素,每个元素代表一个1.分成K个数,即在(N-1)个空挡里放置(K-1)块隔板 ...

  7. 一二三系列之状压DP——Max Correct Set(一)Neko Rules the Catniverse (Large Version)(二)Make It Ascending(三)

    文章目录 一:CF1463F 二:CF1152F2 三:CF1342F 一:CF1463F Max Correct Set 有一个结论:以x+yx+yx+y为周期排列填充一定是不劣于最后的答案的 令p ...

  8. 杭电OJ 敌兵布阵 树状数组

    是一道简单的树状数组的题,,是一道简单题.....题目: C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Der ...

  9. 杭电oj1257最少拦截系统—贪心/dp最大递增子序列

    附上题目链接:杭电oj1257 这个题目有动态规划和贪心两种解决方式. 贪心法1: 对于导弹我们知道只可以从大到小的反导,一个系统必须从大到小排列.那么我们就可以选择从最高的那个导弹入手,往右找仅次于 ...

最新文章

  1. merge用法linux,Merge用法
  2. C语言enum关键字
  3. 计算机的定点运算器原理,计算机组成原理定点运算器的组成及结构.doc
  4. 力扣-169 多数元素
  5. [原创]互联网网站测试经验
  6. 函数无法识别_Halcon OCR识别
  7. HTML学生网页设计作业源码~开心旅游网站设计与实现(HTML期末大作业)
  8. 阿里云短信验证码接口
  9. 监控显示服务器超时,监控连接服务器超时怎么解决
  10. 微信小程序开发上线注意事项
  11. 网络管理与维护(5.1)RMON 远程网络监视
  12. Oracle | CentOS7安装Oracle19c数据库(RPM包)
  13. 补天漏洞平台:让更多的白帽子脱离黑产
  14. 六轴机器人轨迹规划之五段位置s曲线插补
  15. 应广单片机定时器中断配置
  16. 函数缓存 (Function caching)
  17. 语料库语言学与计算语言学研究丛书
  18. 企微SCRM软件能让微信营销达到什么新高度
  19. 自动驾驶测试系列(一):初识自动驾驶 下
  20. 怎么降低jpg文件大小?如何压缩jpg图片变小?

热门文章

  1. Coding: 整数反转
  2. pc端js获取当前经纬度_Swiper 免费开源、功能强大的触摸滑动 js 特效插件
  3. 5.2.1 OS内核的I/O核心子系统及功能
  4. 111 第一章操作系统概述总结思维导图+错题整理
  5. 1.1.4 错题知识整理(机器语言、汇编语言、正则语言、解释程序、编译、汇编)
  6. sqlserver 改变编码格式_PR基础教程 | Day7:导出及格式讲解
  7. rust怎么传送坐标_德国人怎么学电机——浅谈电机模型(十一):异步电机:绕线转子电机(一)...
  8. UDP(首部)和TCP(首部、三次握手、四次挥手、可靠传输、滑动窗口、流量控制、拥塞控制(慢开始、拥塞避免、快重传、快恢复))
  9. word存为html图片有两个,如何批量保存Word图片?另存为Word多个图片的方法
  10. python dataframe删除某一列_怎样用Python进行数据分析