PAT甲级1007 Maximum Subsequence Sum (25 分)题解
\quad 这是最大子序列和问题,是一个典型的动态规划题目,我在博客中对几个常见的动态规划算法进行了分析。设输入的数保存在数组a[max]
中,那么转移方程为dp[i]=max(dp[i-1]+a[i],a[i])
。最大子序列和即为dp数组的最大值res,我们记录下zp数组第一次出现最大值的位置last,从last往前将a[i]数组的值加起来,直到值为res为止,此时的位置就是最大子序列的起始位置first。需注意题目规定当输入的数全为负数时输出0和首位、末尾的数,这点需要提前特判。
#include <stdio.h>
#include <algorithm>
using namespace std;const int maxn = 1e4+10;
int a[maxn], dp[maxn];int main(int argc, char const *argv[])
{int K; scanf("%d", &K);for(int i = 1; i <= K; i++) scanf("%d", &a[i]);// 特判:若输入的数全部小于0,则输出0和首位、末尾的数bool flag = true;for (int i = 1; i <= K; ++i){if(a[i]>=0) flag=false;}if(flag){printf("%d %d %d\n", 0, a[1], a[K]);return 0;}// 开始dpdp[1] = a[1];int res = dp[1];for(int i = 2; i <= K; i++){dp[i] = max(dp[i-1]+a[i], a[i]);res = max(res, dp[i]);}int first, last; // 记录首位和末位for(int i = 1; i <= K; i++){if(dp[i]==res) {last=i;break;}}int temp = 0;for(int i = last; i >= 1; i--){temp += a[i];if(temp==res) {first=i;break;}}printf("%d %d %d\n", res, a[first], a[last]);return 0;
}
PAT甲级1007 Maximum Subsequence Sum (25 分)题解相关推荐
- PAT甲级--1007 Maximum Subsequence Sum (25 分)
题目详情 - 1007 Maximum Subsequence Sum (25 分) (pintia.cn) Given a sequence of K integers { N1, N2, .. ...
- PAT甲级 -- 1007 Maximum Subsequence Sum (25 分)
Given a sequence of K integers { N1, N2, ..., NK }. A continuous subsequence is defined to ...
- PAT甲级1007 Maximum Subsequence Sum :[C++题解]DP,最大子序列和、求最优的区间方案
文章目录 题目分析 题目链接 题目分析 来源:acwing 分析: dp题. 这道题糅合了两个知识点: dp求最值(区间之和) 动态求区间方案:区间之和相等的条件下:要求区间左端点最靠前,如果左端点相 ...
- 【PAT甲】1007 Maximum Subsequence Sum (25分),求最大字段和及区间
problem 1007 Maximum Subsequence Sum (25分) Given a sequence of K integers { N 1 , N 2 , -, N ...
- 【测试点5】1007 Maximum Subsequence Sum (25 分)
立志用最少的代码做最高效的表达 PAT甲级最优题解-->传送门 Given a sequence of K integers { N1 , N2 , -, NK }. A co ...
- 1007 Maximum Subsequence Sum (25 分) java 题解
Given a sequence of K integers { N1, N2, ..., NK }. A continuous subsequence is defined to be { N ...
- PAT A 1007. Maximum Subsequence Sum (25)
原题 Given a sequence of K integers { N1, N2, ..., NK }. A continuous subsequence is defined to be { ...
- 【PAT甲级 最长公共子串】1007 Maximum Subsequence Sum (25 分) C++ 全部AC
题目 读题!读题! 题上让输出最长子串起始位置和终止位置的数字,而不是角标 如果每个数都是负数,则输出0 不要看着测试用例去猜题意,要先把题完整看完了再开始码! 如果自己的测试用例全都通过了,题目的测 ...
- 1007 Maximum Subsequence Sum (25 分)【难度: 一般 / 知识点: 最大子序列和】
https://pintia.cn/problem-sets/994805342720868352/problems/994805514284679168 方法一: 前缀和+枚举 时间复杂度: O(n ...
最新文章
- Cell Research:华农解析水虻基因组图谱和肠道微生物组降解规律
- [转]开发者需要了解的WebKit(mark)
- WINCE基于CH7024实现TV OUT (VGA)功能
- 二十四种设计模式:装饰模式(Decorator Pattern)
- 中间介(MiddleWare)
- PHPJavaScript笔记-后端利用Refresh头带错误信息给前端(野路子操作)
- linux查看vnc进程命令_linux命令:VNC服务的配置及使用
- 小米POCO X3今日亮相:首发骁龙732G后置6400万四摄
- 苹果新机发布在即 供应链齐泼冷水:卖不了7000万台
- 查看linux进程的设备io,Linux下查看进程IO工具iopp
- JMeter集合点功能的使用
- 湖北飞young使用任意路由器教程
- 阿里云跨云迁移工具案例实践:腾讯云迁移到阿里云
- linux mysql backdoor_Mysql BackDoor
- 总结:6个不得不看的APP获客模式
- 怎么用class引入svg_让动效更酷炫!4 个常见且常用的 SVG 交互动画方法
- GeoServer之发布Geotiff存在的问题
- ATLAS/ICESAT-2 NASA 数据产品详细介绍及相关说明文档
- 计算机等级考试java题型_全国计算机等级考试二级JAVA笔试题目
- chmod不是内部或外部命令