dp经典问题-最大连续子序列和 hdu1003
题目描述:
这道题我先后做过三遍,结果每一遍都没有做出来。今天再仔仔细细的研究了一下,才发现用动态规划更好理解。
关于求最大连续子序列和的博文转载如下:https://www.cnblogs.com/coderJiebao/p/Algorithmofnotes27.html
最大连续子序列和的特点就是这个和一定比它的子序列中任何一个数要大,所以就有了判断条件。
已知一序列:把数列第一个数存入dp[0],从第一个数开始遍历,用一个dp数组去存两数之间的最大子序列和,因此得出动态转移方程式dp[i]=max(dp[i-1]+a[i],a[i]);
代码实现:
#include <iostream>
#include <cstdio>
using namespace std;
int a[],dp[];
int main()
{
int T,n,i=;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
for(int i=;i<n;i++)
{
scanf("%d",&a[i]);
}
dp[] = a[];
int start = ,end = ,max = -;
int first = ,last = ;
for(int i=;i<n;i++)
{
if(dp[i-]+a[i]>=a[i]) //判断条件
{
dp[i] = dp[i-]+a[i];
end = i;
}
else//如果最长子序列和比a[i]还小,那么就从当前a[i]开始重新遍历
{
dp[i] = a[i];
start = end = i;
}
if(max<dp[i])
{
max = dp[i];
first = start;
last = end;
}
}
printf("Case %d:\n%d %d %d\n",++i,max,first+,last+);
if(T!=)
{
printf("\n");
}
}
return ;
}
另一个改进的版本:
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
int t,n,a[],Case=;
int thissum,maxsum,begin,end,postion;
cin>>t;
while(t--){
cin>>n;
for(int i=; i<n; i++)
cin>>a[i];
thissum=maxsum=a[];
begin=end=postion=;
for(int i=; i<n; i++){
if(thissum+a[i]<a[i]){//如对于6 -1 0 3 -4 3 2这组数据来说,就会更新postion
thissum=a[i];
postion=i;
}
else thissum+=a[i];
if(thissum>maxsum){
maxsum=thissum;
begin=postion;
end=i;
}
}
printf("Case %d:\n%d %d %d\n",Case++,maxsum,begin+,end+);
}
return ;
}
dp经典问题-最大连续子序列和 hdu1003的更多相关文章
- DP———1.最大子连续子序列和
最大连续子序列 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Sub ...
- 最大连续子序列和(DP)
DP入门_最大连续子序列(最大连续和) Description 有一条崎岖的山路,该山路被分成了n段(1<=n<=100,000),每段山路的驾驶体验不同.作为老司机的刘师傅给每段山路打分 ...
- hdu1003 Max Sum【最大连续子序列之和】
题目链接:https://vjudge.net/problem/HDU-1003 题目大意:给出一段序列,求出最大连续子序列之和,以及给出这段子序列的起点和终点. 解题思路:最长连续子序列之和问题其实 ...
- 最大连续子序列(简单DP实现)
最大连续子序列 最大连续子数列和一道很经典的算法问题,给定一个数列,其中可能有正数也可能有负数,我们的任务是找出其中连续的一个子数列(不允许空序列),使它们的和尽可能大.我们一起用多种方式,逐步优化解 ...
- 最大连续子序列乘积(DP)
题目来源:小米手机2013年校园招聘笔试题 题目描述: 给定一个浮点数序列(可能有正数.0和负数),求出一个最大的连续子序列乘积. 输入: 输入可能包含多个测试样例.每个测试样例的第一行仅包含正整数 ...
- DP专题训练之HDU 1231 最大连续子序列
Description 给定K个整数的序列{ N1, N2, ..., NK },其任意连续子序列可表示为{ Ni, Ni+1, ..., Nj },其中 1 <= i <= j < ...
- HDU-1231 简单dp,连续子序列最大和,水
1.HDU-1231 2.链接:http://acm.hdu.edu.cn/showproblem.php?pid=1231 3.总结:水 题意:连续子序列最大和 #include<iostre ...
- HDU 1231 最大连续子序列 --- 入门DP
HDU 1231 题目大意以及解题思路见: HDU 1003题解,此题和HDU 1003只是记录的信息不同,处理完全相同. /* HDU 1231 最大连续子序列 --- 入门DP */ #inclu ...
- HDU 1003 Max Sum && HDU 1231 最大连续子序列 (DP)
Max Sum Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Sub ...
随机推荐
- redhat7.3安装yum源
#检查rehat自带的yum源[root@localhost ~]# rpm -qa | grep yum -.el7.noarch -.el7.noarch -.el7.noarch -.el7.n ...
- ios 调整 label 的字体行间距
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 100, self.view.frame.size.width, 200) ...
- Confluence 6 数据导入和导出
Confluence 管理员和用户可以从各种方法向 Confluence 中导入数据.针对不同的导入方式,有关权限的要求也是不相同的.请参考页面 Import Content Into Conflu ...
- Confluence 6 修改特定的空间标识图片
空间管理员可以为他们管理的空间修改空间标识图片.这个修改将会覆盖默认的空间标识图片,任何对默认空间图标表示的修改将不会对已经修改的空间标识图片产生影响.请查看上面的例子中的 'Sample Space ...
- Vue.extend和Vue.component的联系与差异
extend 是构造一个组件的语法器. 你给它参数 他给你一个组件 然后这个组件 你可以作用到Vue.component 这个全局注册方法里, 也可以在任意vue模板里使用apple组件 var ap ...
- js之DOM对象三
一.JS中for循环遍历测试 for循环遍历有两种 第一种:是有条件的那种,例如 for(var i = 0;i<ele.length;i++){} 第二种:for (var i in ...
- [Gym-102091E] How Many Groups
/* 先将a数组从小到大排序 dp[i][j][k]表示到以第i个数为结尾的,且第i个数改了j次,第i个数改动值为k-1的集合最大值 ans是dp过程中的最大集合大小 状态转移: 首先是到i改动为0次 ...
- cf1073c 二分+二维前缀和
#include<bits/stdc++.h> using namespace std; #define maxn 200005 char s[maxn]; ][maxn]; map< ...
- vue 中样式的绑定
1.class的对象绑定 //对应的css <style> .active { color: red; } </style> <!--html 对应的代码--> & ...
- base64解密
问题 : base64解密 时间限制: 1 Sec 内存限制: 128 MB 题目描述 Base64编码要求把3个8位字节(3*8=24)转化为4个6位的字节(4*6=24),之后在6位的前面补两个 ...