最大子段和(洛谷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 ...
随机推荐
- Ajax 之 DWR
DWR是开源框架,类似于hibernate.借助于DWR,开发人员无需具备专业的JavaScript知识就可以轻松实现Ajax,是Ajax更平民化. 添加jar包 dwr.jar common ...
- JPG文件格式
开始:0xFF 0xD8 结束:0xFF 0xD9 文件的宽高:0xFF 0xC0 之后隔二个字节(0x11 0x08 这二个字节一般是固定的.描述这个块的长度.) 然后用四个字节来存储图片的高和宽0 ...
- javaSE基础(三)
泛型类:像ArrayList这样的特殊类,他们允许通过类型参数来指明使用的数据类型. 报装类:一种用于将基本类型的数据"封装"成对象的类. 装箱:将 基本类型的数据自动转换为对应类 ...
- A Go library implementing an FST (finite state transducer)——mark下
https://github.com/couchbaselabs/vellum Building an FST To build an FST, create a new builder using ...
- GCD总结(一)
GCD为我们提供了三种类型的调度队列(dispatch queue),分别为串行,并行和主调度队列. 串行(Serial) 你可以创建任意个数的串行队列,每个队列依次执行添加的任务,一个队列同 ...
- 洛谷P1850 [noip2016]换教室——期望DP
题目:https://www.luogu.org/problemnew/show/P1850 注释掉了一堆愚蠢,自己还是太嫩了... 首先要注意选或不选是取 min 而不是 /2 ,因为这里的选或不选 ...
- MVC post 方法导出word文档
View code: function ExportWord(){ var html = $("#div_workInfo").html(); $("#hidWord&q ...
- IntelliJ IDEA 缓存和索引介绍
转自:https://www.cnblogs.com/zhanghaibinblogs/p/6722061.html IDEA 在首次加载项目的时候都会创建索引,IDEA 的缓存和索引主要是用来加快文 ...
- CodeForces 382C Arithmetic Progression (排序+分类讨论)
题意:给出一个长度为n的序列,表示有n张卡片,上面的数字,现在还有一张卡片,上面没有数字,问说可以写几种数字在这张卡片上面, 使得n+1张卡片上的数字可以排列成一个等差数列,有无限多种时输出-1. 析 ...
- 01-vue指令
什么是Vue.js Vue.js 是目前最火的一个前端框架,React是最流行的一个前端框架(React除了开发网站,还可以开发手机App, Vue语法也是可以用于进行手机App开发的,需要借助于We ...