DP入门_最大连续子序列(最大连续和)

Description

有一条崎岖的山路,该山路被分成了n段(1<=n<=100,000),每段山路的驾驶体验不同。作为老司机的刘师傅给每段山路打分。
分值越高,表示驾驶体验越好;分值越低,表示驾驶体验越差。

例如,有一条山路被划分成6段,每段的驾驶体验值分别是:
{ -2,11,-4,13,-5,-2 },其中驾驶体验值总和最大的一段为红色数字表示:
{ -2,11,-4,13,-5,-2 },最大连续驾驶体验值和为20。
现在要求,输入一串数字(表示山路分的段值),输出最大连续驾驶体验值。

Input
第一行,输入n。表示有n段山路。

第二行,输入n个数字,空格隔开。表示每段的驾驶体验值。

Output
输出一个整数,表示最大连续体验值。

先上代码:

 1 #include<iostream>
2 #include<cmath>
3 using namespace std;
4 int a[1000001];
5 int f[1000001];
6 int maxn=-1;
7 int main()
8 {
9 int n;
10 cin>>n;
11 for(int i=1;i<=n;i++)
12 {
13 cin>>a[i];
14 }
15 f[1]=a[1];
16 for(int i=1;i<=n;i++)
17 {
18 f[i]=max(f[i-1]+a[i],a[i]);
19 maxn=maxn>f[i]? maxn:f[i];
20 }
21 cout<<maxn;
22 return 0;
23
24 }

其实题目讲的就是在一个数组中找到某几个连续的数使得它们的和最大,针对这样的题,当然使用DP啦

先输入他们,f[i]数组代表是 i 状态时的最好方案(最大的和),值得注意的是,f[1]的状态就是a[i],因为就他一个。,我们现在的主要任务就是寻找此问题的状态转移方程,

仔细想想,我们会发现,我们想要求得的第i个状态的最好方案无非就两种,要么加他,要么不加他,再取个max就好了。

得到:f[i]=max(f[i-1]+a[i],a[i])

下面就顺水推舟的出来了

2022/3/17

最新文章

  1. MFC下打开选择文件夹并获取文件夹的绝对路径
  2. 两种文件上传的实现-Ajax和form+iframe
  3. LIGHTSWITCH 连接 MYSQL,中文字符不能保存----解决方法。
  4. solr导入数据库数据-tinyint数据转boolean
  5. DestroyWindow函数注意事项
  6. php验证是否是中文
  7. mysql数据库性能优化(包括SQL,表结构,索引,缓存)
  8. Samba服务器安装及配置
  9. android从应用到驱动之—camera(2)---cameraHAL的实现
  10. Android开发学习之Adapter
  11. 使用AutoMapper实现Dto和Model之间自由转换
  12. oracle积累继续
  13. The 2013 South America/Brazil Regional Contest 题解
  14. 配置Java文件
  15. 大数据处理N!(21&lt;N&lt;2000)
  16. 矢量图面层和线层相交得到相交后的线层文件(gis相交)
  17. T4 反射实体模型生成代码(Demo)
  18. Hadoop记录-hadoop2.x常用端口及定义方法
  19. C++:UNREFERENCED_PARAMETER用法
  20. WCF寄宿到Windows Service

热门文章

  1. 获取缓存文件大小并清理 By HL
  2. Annotation深入研究——@Documented注释使用
  3. 总结tomcat的核心组件以及根目录结构
  4. sql与数据库
  5. 私有化轻量级持续集成部署方案--03-部署web服务(上)
  6. sqli-labs 1-22关
  7. Solution Set -「LOCAL」冲刺省选 Round XXI
  8. [LeetCode]26.删除有序数组中的重复项(Java)
  9. Linux编译安装升级bash5.1
  10. suse 12 二进制部署 Kubernetets 1.19.7 - 第10章 - 部署kube-proxy组件