最大子段和(洛谷P1115,动态规划递推)
洛谷题目链接
题目赋值出来格式有问题,所以我就只放题目链接了
下面为ac代码
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const ll maxn=+;
ll a[maxn];//存放输入的数据
ll f[maxn];//用来递推
int main()
{
ll n;
cin>>n;
for(ll i=;i<=n;i++)
scanf("%lld",&a[i]);//输入数据 for(ll i=;i<=n;i++)
{
f[i]=max(a[i],a[i]+f[i-]);
} ll ans=f[];//先给ans赋初值为f[i] for(ll i=;i<=n;i++)//这里的意思是让ans等于f[1~n]中最大的
if(f[i]>ans)
ans=f[i]; cout<<ans<<endl; }
点击加号展开代码
文字讲解(代码中也有部分注释):
f[i]数组的意义是以a[i]为末尾的序列中最大的总和
比如说序列1 3 4
那么f[1]=1,f[2]=1+3=4,f[3]=1+3+4=8
然后如果从左往后递推,也就是f[i],i从1~n
f[i],可以等于a[i],也可以等于f[i-1]+a[i]
这两个要看谁大,所以要用max函数,具体的递推方程就是:
f[i]=max(a[i],a[i]+f[i-1])
比如说当f[i-1]=4,a[i]=-1,那么f[i]就肯定选和f[i-1]合并比较好
那么如果f[i-1]=-1,a[i]=4,此时f[i]=a[i]能保证f[i]是以a[i]为末尾的序列中最大的总和
类似的栗子还有好多,可以自己举栗子看看
接下来推荐一道类似的知识点题目:
最长不下降子序列
最长上升子序列(动态规划递推)
再贴一次代码
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const ll maxn=+;
ll a[maxn];//存放输入的数据
ll f[maxn];//用来递推
int main()
{
ll n;
cin>>n;
for(ll i=;i<=n;i++)
scanf("%lld",&a[i]);//输入数据 for(ll i=;i<=n;i++)
{
f[i]=max(a[i],a[i]+f[i-]);
} ll ans=f[];//先给ans赋初值为f[i] for(ll i=;i<=n;i++)//这里的意思是让ans等于f[1~n]中最大的
if(f[i]>ans)
ans=f[i]; cout<<ans<<endl; }
最大子段和(洛谷P1115,动态规划递推)的更多相关文章
- NOIP 2008 传纸条(洛谷P1006,动态规划递推,滚动数组)
题目链接:P1006 传纸条 PS:伤心,又想不出来,看了大神的题解 AC代码: #include<bits/stdc++.h> #define ll long long using na ...
- NOIP 2006 金明的预算方案(洛谷P1064,动态规划递推,01背包变形,滚动数组)
一.题目链接:P1064 金明的预算方案 二.思路 1.一共只有五种情况 @1.不买 @2.只买主件 @3.买主件和附件1(如果不存在附件也要运算,只是这时附件的数据是0,也就是算了对标准的结果也没影 ...
- AC日记——最大子段和 洛谷 P1115
题目描述 给出一段序列,选出其中连续且非空的一段使得这段和最大. 输入输出格式 输入格式: 输入文件maxsum1.in的第一行是一个正整数N,表示了序列的长度. 第2行包含N个绝对值不大于10000 ...
- 最长上升子序列(动态规划递推,LIS)
1759:最长上升子序列 题目: 总时间限制: 2000ms 内存限制: 65536kB 描述 一个数的序列bi,当b1 < b2 < ... < bS的时候,我们称这个序列是上升的 ...
- 洛谷p1115 最大子段和
题目链接: 最大子段和 题目分析: 动态规划O(n)求解,设f[i]表示以i为终点的最大子段和 分两种情况: 若f[i-1]>0,则显然f[i]=f[i-1]+a[i](a[i]必须包含在内) ...
- P1759 通天之潜水(不详细,勿看)(动态规划递推,组合背包,洛谷)
题目链接:点击进入 题目分析: 简单的组合背包模板题,但是递推的同时要刷新这种情况使用了哪些物品 ac代码: #include<bits/stdc++.h> using namespace ...
- P2347 砝码称重(动态规划递推,背包,洛谷)
题目链接:P2347 砝码称重 参考题解:点击进入 纪念我第一道没理解题意的题 ''但不包括一个砝码也不用的情况'',这句话我看成了每个砝码起码放一个 然后就做不出来了 思路: 1.这题数据很小,10 ...
- NOIP2000方格取数(洛谷,动态规划递推)
先上题目: P1004 方格取数 下面上ac代码: ///如果先走第一个再走第二个不可控因素太多 #include<bits/stdc++.h> #define ll long long ...
- P1541 乌龟棋 题解(洛谷,动态规划递推)
题目:P1541 乌龟棋 感谢大神的题解(他的写的特别好) 写一下我对他的代码的理解吧(哎,蒟蒻就这能这样...) 代码: #include<bits/stdc++.h> #define ...
随机推荐
- linux select poll and epoll
这里以socket文件来阐述它们之间的区别,假设现在服务器端有100 000个连接,即已经创建了100 000个socket. 1 select和poll 在我们的线程中,我们会弄一个死循环,在循环里 ...
- web container和spring container之间的关系
1 tomcat是一个web container,它提供java web应用的运行环境,因为它实现了好多java ee规范,比如java Servlet.JSP等,也就是说,没有它,java web应 ...
- UVA 315 求连通图里的割点
http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=20837 哎 大白书里求割点的模板不好用啊,许多细节理解起来也好烦..还好找了 ...
- 【Poj 1832】连环锁
连环锁 Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 1260 Accepted: 403 Description 许多 ...
- MAC OS brew安装MNMP
安装HomeBrew Brew是Mac下面的包管理工具,就像centos下面的yum一样.HomeBrew可以通过ruby来安装,mac系统是自带ruby的,所以只要在终端运行下面的代码即可安装Hom ...
- Navicat for MySQL 激活方法
Navicat for MySQL 激活方法: 首先下载 PatchNavicat.exe ,不知道在哪儿下的可以直接拿走: 链接:https://pan.baidu.com/s/1yy4M8IDx8 ...
- 从Linux内核中获取真随机数
内核随机数产生器 Linux内核实现了一个随机数产生器,从理论上说这个随机数产生器产生的是真随机数.与标准C库中的rand(),srand()产生的伪随机数不同,尽管伪随机数带有一定的随机特征,但这些 ...
- C的结构体函数
#include<stdio.h> #include<string.h> struct Test { int age; ]; double score; }std1; //结构 ...
- 利用XStream实现对象XML话
使用Java原生的序列化的方式来表示一个对象.总结一下这种对象表示方式的优缺点: 1.纯粹的Java环境下这种方式可以很好地工作,因为它是Java自带的,也不需要第三方的Jar包的支持 2.多语言环境 ...
- Maven构建的生命周期
什么是构建生命周期 构建生命周期是一组阶段的序列(sequence of phases),每个阶段定义了目标被执行的顺序.这里的阶段是生命周期的一部分.举例说明,一个典型的 Maven 构建生命周期是 ...