动态规划 HDU1231-------最大连续子序列
这道题貌似有很多前辈总结过,写写自己是怎样理解的吧。
#include <iostream>
#include <cstdio> using namespace std;
int num[]; int main()
{
int K,start,end,thisMax,MAX;
while(scanf("%d",&K)&&K)
{
int count=,temp;
for(int i=;i<K;i++) {scanf("%d",&num[i]);if(num[i]<) count++;} if(count==K) {printf("0 %d %d\n",num[],num[K-]);continue;}
start=end=;
thisMax=MAX=num[]; for(int i=;i<K;i++)
{
if(thisMax<)
{
temp=i;
thisMax=;
}
thisMax+=num[i]; if(thisMax>MAX)
{
start=temp;
end=i;
MAX=thisMax;
}
}
printf("%d %d %d\n",MAX,num[start],num[end]);
}
return ;
}
设这一数组是a1,a2,.....,ai,ai+1,....an,首先初始化MAX=thisMAX=a1,start=end=1;然后对ai进行分析有MAX=(a[start],...,a[end]),thismax=(a[start],...,a[i-1]),其中i-1>=end;若thisMAX<0,则说明start......i-1中可以去掉end+1,...,i-1这一部分。对此我们可以用一个临时标界符temp来分开指示从i开始的连续和,这时thisMAX=0;开始新的求和,到此我们有两组“开始”,“结束”,”最大值“。第一组start,end,MAX;第二组:临时标界符temp,i-1,thismMAX;然后对i进行分析:
1.若ai<0,有假如thisMAX<0,则由于MAX至少大于等于0,所以不会更新;thisMAX>0(此时thisMAX一定是<=MAX的,不然在前面MAX的值一定会同步thisMAX的),又有thisMAX+ai<thisMAX<MAX,故仍旧不用更新
2.若ai>0,实际上就是上述的两组进行比较,若thisMAX>MAX,则进行更新start=temp,end=i;MAX=thisMAX;
这就是我的理解。
动态规划 HDU1231-------最大连续子序列的更多相关文章
- hdu1231最大连续子序列(动态规划)
最大连续子序列 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Sub ...
- 【动态规划】最大连续子序列和,最大子矩阵和,最大m子段和
1.最大字段和问题 求一个序列最大连续子序列之和. 例如序列[-1,-2,-3,4,5,-6]的最大子段和为4 + 5 = 9. ①枚举法 int MaxSum(int n,int *a){ int ...
- 动态规划:最大连续子序列乘积 分类: c/c++ 算法 2014-09-30 17:03 656人阅读 评论(0) 收藏
题目描述: 给定一个浮点数序列(可能有正数.0和负数),求出一个最大的连续子序列乘积. 分析:若暴力求解,需要O(n^3)时间,太低效,故使用动态规划. 设data[i]:第i个数据,dp[i]:以第 ...
- HDU 1081 To the Max 最大子矩阵(动态规划求最大连续子序列和)
Description Given a two-dimensional array of positive and negative integers, a sub-rectangle is any ...
- 题解报告:hdu1231最大连续子序列
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1231 Problem Description 给定K个整数的序列{ N1, N2, ..., NK } ...
- hdu1231 最大连续子序列
#include<stdio.h> #include<string.h> #define maxn 10010 int a[maxn],dp[maxn]; int main() ...
- hdu1231最大连续子序列
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1231 #include<iostream> #include<cstdio> ...
- HDU-1231 简单dp,连续子序列最大和,水
1.HDU-1231 2.链接:http://acm.hdu.edu.cn/showproblem.php?pid=1231 3.总结:水 题意:连续子序列最大和 #include<iostre ...
- 动态规划(Dynamic Programming, DP)---- 最大连续子序列和
动态规划(Dynamic Programming, DP)是一种用来解决一类最优化问题的算法思想,简单来使,动态规划是将一个复杂的问题分解成若干个子问题,或者说若干个阶段,下一个阶段通过上一个阶段的结 ...
随机推荐
- 黄聪:WordPress 多站点建站教程(二):后台(管理网络)设置详解,如何管理子站的用户、主题、插件、设置等功能
建立好了子站,我们需要有个地方配置所有子站的主题.插件等功能,我们可以在后台看到 我的站点--管理网络 如下图: 在 管理网络--仪表盘 里面,我们可以创新用户和站点,也提供了查询功能. 要注意的是: ...
- Java集合类综合
Java集合类是JDK学习中的一个经典切入点,也是让初学者最初感受到Java魅力的地方之一,你一定不会忘记不需要关心大小的ArrayList,不用自己实现的Queue,和随处可见的HashMap.面试 ...
- java web 程序---javabean实例--登陆界面并显示用户名和密码
重点:注意大小写,不注意细节,这点小事,还需要请教 发现一个问题,也是老师当时写的时候,发现代码没错,但是就是运行问题. 大家看,那个java类,我们要求是所有属性均为私有变量,但是方法为公有的,如果 ...
- [Android] 开发第五天
布之前开发的 Android 电话拨号器 Android-Studio 已经带了发布菜单, Build -> Generate Signed APK 进入发布界面 我们新增一个证书,或者使用已有 ...
- F5 SNAT NAT相关
SNAT: 跟路由器.防火墙一样,BIG-IP系统提供NAT (Network Address Translation)和SNAT(Secure Network Address Translation ...
- fdisk用法(转载)
Linux下的fdisk功能是极其强大的,用它可以划分出最复杂的分区,下面简要介绍一下它的用法: 对于IDE硬盘,每块盘有一个设备名:对应于主板的四个IDE接口,设备名依次为:/dev/hda,/de ...
- centos7开发环境配置总结
1.win10下SecureCRT SSH连接慢 2.CentOS 7下Samba服务器的安装与配置 3.
- 网页中显示pdf的方法
非常好的在网页中显示pdf的方法 今天有一需求,要在网页中显示pdf,于是立马开始搜索解决方案,无意中发现一个非常好的解决方法,详见http://blogs.adobe.com/pdfdevjunki ...
- 概率分布之间的距离度量以及python实现
1. 欧氏距离(Euclidean Distance) 欧氏距离是最易于理解的一种距离计算方法,源自欧氏空间中两点间的距离公式.(1)二维平面上两点a(x1,y1)与b(x2,y2)间的欧 ...
- 如何设置mysql允许外网访问
修改表,登录mysql数据库,切换到mysql数据库,使用sql语句查看"select host,user from user ;" console: >use mysql; ...