原创


http://acm.hdu.edu.cn/showproblem.php?pid=1003

  题目要求求出一个序列里面的最大序列和,序列要求是连续的,给出最大序列和,序列首元素下标和尾元素下标,按特定的格式输出。

  解题思路:

    动态规划,我们可以将所有序列按以序列中的元素a[i](i=1~n)结尾进行分类,比如:

    以a[1]结尾的序列有:a[1]

    以a[2]结尾的序列有:a[1]a[2],a[2]

    以a[3]结尾的序列有:a[1]a[2]a[3],a[2][3],a[3]

    ...... 

    这样所有序列都会包含在其中,一共被分为n大组,每大组里面包含许多小序列,从每大组里面选出最大的序列和,这样会选出n个

    序列和,再从n个序列和中选出最大的就是题目要求的最大序列和了。

    动态规划公式演算:

    之前说过有n大组,用dp[]存储从每大组中选出来的最大序列和,其中

    dp[1]=a[1]

    dp[2]=max(a[1]a[2],a[2]),即从两个序列里面选出序列和最大的,既然只需要比较序列和,两个数比较大小,两个数同时减去一

    个相同的数不影响比较,那么两个序列都先把元素a[2]减去,这样就成了dp[2]=max(dp[1]+a[2],a[2])。

    dp[3]=max(a[1]a[2]a[3],a[2][3],a[3]),写成max(a[1]a[2]+a[3],a[2]+[3],0+a[3])更容易理解动态规划思想,3个序列都先把

    a[3]提出变成max(a[1]a[2],a[2],0),再变成max(max(a[1]a[2],a[2]),0),三个数比较,可以先比较其中2个,再和第三个比较,

    可以发max(a[1]a[2],a[2])就是dp[2],所以max(a[1]a[2],a[2],0)就是max(dp[2],0),加回a[3],max(dp[2]+a[3],a[3])。

    所以我们可以轻而易举的按顺序求出n大组的序列和,然后再从n个序列和中求出最大的。

    关于求最大序列和的首尾元素索引:

    我们在求某个dp[i]的时候,代表目前是从以a[i]结尾的序列和中求出序列和最大的存入dp[i]中,所以尾元素可以得知。

    尾元素得到,可以往回找到首元素。

Java AC

 import java.util.*;

 public class Main {

     public static void main(String[] args) {
Scanner reader=new Scanner(System.in);
int T=reader.nextInt();
int count=1;
while(T>0) {
int N=reader.nextInt();
int a[]=new int[N+1];
for(int i=1;i<=N;i++) {
a[i]=reader.nextInt();
}
int dp=a[1];
int sum_Max=dp;
int start=1;
int end=1;
for(int i=2;i<=N;i++) {
dp=dp+a[i]>a[i]?(dp+a[i]):a[i]; //动态存储以a[1]~a[n]结尾的序列组的最大序列和
if(dp>sum_Max) {
sum_Max=dp;
end=i; //结尾索引
}
}
//寻找开头索引
int sum=0;
for(int i=end;i>=1;i--) {
sum+=a[i];
if(sum==sum_Max) {
start=i;
//这里不能break,当序列中存在多个序列具有同样的最大序列和,题目要求输出第一个被找到的序列
}
}
System.out.println("Case "+count+":");
System.out.println(sum_Max+" "+start+" "+end);
if(T!=1) {
System.out.println();
}
T--;
count++;
}
} }

21:21:39

2018-08-19

Max Sum(动态规划)的更多相关文章

  1. HDU-1003 Max Sum(动态规划,最长字段和问题)

    Max Sum Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  2. HDU 1003 Max Sum (动态规划 最大区间和)

    Max Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Sub ...

  3. hdu 1003 Max Sum(动态规划)

    解题思路: 本题在给定的集合中找到最大的子集合[子集合:集合的元素的总和,是所有子集合中的最大解.] 结果输出: 最大的子集合的所有元素的和,子集合在集合中的范围区间. 依次对元素相加,存到一个 su ...

  4. HDOJ-1003 Max Sum(最大连续子段 动态规划)

    http://acm.hdu.edu.cn/showproblem.php?pid=1003 给出一个包含n个数字的序列{a1,a2,..,ai,..,an},-1000<=ai<=100 ...

  5. HDU 1024 Max Sum Plus Plus【动态规划求最大M子段和详解 】

    Max Sum Plus Plus Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others ...

  6. HDU 1003 Max Sum【动态规划求最大子序列和详解 】

    Max Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Sub ...

  7. HDU 1024 Max Sum Plus Plus (动态规划)

    HDU 1024 Max Sum Plus Plus (动态规划) Description Now I think you have got an AC in Ignatius.L's "M ...

  8. HDU 1024 Max Sum Plus Plus (动态规划、最大m子段和)

    Max Sum Plus Plus Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others ...

  9. HDOJ 1024 Max Sum Plus Plus -- 动态规划

    题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1024 Problem Description Now I think you have got an ...

随机推荐

  1. 开启mac terminal 命令/路径自动补全功能

    用惯了windows命令行工具的按Tab自动补全路径功能后,在mac terminal上敲命令很不习惯.其实mac terminal也有这个功能. 在命令行输入nano .inputrc 进入.inp ...

  2. ajax同步异步

    test.html <a href="javascript:void(0)" onmouseover="testAsync()"> asy.js f ...

  3. Linux LED字符设备驱动

    // 申请IO资源 int gpio_request(unsigned gpio, const char *label); // 释放IO资源 void gpio_free(unsigned gpio ...

  4. his移植问题

    报错信息 权限不够未截图 注意修改uploads文件权限chmod 777 uploads 修改域名 参照dxtzy项目,sourcetree备注

  5. oracle 11g r2 rac +openfiler 2.99 +centos 6.5+vbox

    继上篇openfiler 2.99安装之后,这一篇讲介绍openfiler的存储配置和oracle 端的服务配置 参考文档:https://www.oracle.com/technetwork/cn/ ...

  6. python's twenty-first day for me 抽象类和接口类以及多态

    归一化设计: 不管是哪一个类的对象,都调用同一个函数去完成相似的功能. class Alipay: def pay(self,money): print('使用支付宝支付了%s' % money) c ...

  7. 第十六章 Java内存模型(待续)

    ········

  8. 微信小程序wxss设置样式

    微信小程序wxss设置样式 对于以前搞客户端开发的来说,有着客户端的逻辑,就是不知道怎么设置样式,把对应的控件显示出来 一.wxml 界面结构wxmL比较容易理解,主要是由八大类基础组件构成: 一.视 ...

  9. 性能监控工具YourKit

    1.下载YourKit(在不同系统或终端下请保持版本一致) http://www.yourkit.com/java/profiler/index.jsp 2. 解压Linux的YourKit tar ...

  10. Professional C# 6 and .NET Core 1.0 - Chapter 37 ADO.NET

    本文内容为转载,供学习研究.如有侵权,请联系作者删除. 转载请注明本文出处:Professional C# 6 and .NET Core 1.0 - 37 ADO.NET 译文:C# 6 与 .NE ...