C++ 算法考级专栏
真题分析、矩阵探测、递归回溯与基础语法
🎨 视觉封面【前缀和优化与线性动态规划】GESP六级 / CSP-J 题解:luogu-P17457 [GESP202609 六级] 数组划分
CCF GESP 2026年9月认证(第十五次认证)C++ 六级试题,洛谷 P17457。本题严格遵循 CCF GESP 官方大纲规范,重点考察前缀和优化与线性动态规划。题目逻辑严密,模型典型,是深入理解与掌握信奥核心考点的经典范例。
P17457 [luogu-P17457 [GESP202609 六级] 数组划分]
🔗 洛谷原题传送门:P17457
题目要求
题目描述
给定 个整数构成的数组 。你需要将数组 划分为若干非空连续子段,每个子段的偏差值定义为子段内整数和的平方。总偏差值定义为所有子段偏差值之和。 请你最小化划分方案的偏差值之和。
输入格式
第一行一个正整数 。 第二行 个整数 。
输出格式
一行,一个整数,表示偏差值的最小值。
输入输出样例
样例输入 #1
4
1 2 -3 4
样例输出 #1
6
说明/提示
。
题目分析与解题思路
- 最优子结构与状态定义: 连续子段划分满足无后效性。定义 表示将前缀 划分为若干合法子段时的最小偏差值之和。
- 状态转移方程: 枚举最后一个子段的起始位置 (即上一个子段在 处结束,其中 ): 其中 为前缀和。
- 边界条件:,其余初始化为正无穷 。
- 时间复杂度:状态数 ,每个状态转移枚举 ,总时间复杂度 。对于 ,运算次数约 ,在 内轻松通过。
完整参考代码 (C++11)
/**
* Problem: luogu-P17457
* Standard: C++11 (CCF GESP 官方大纲规范)
* Author: OneCoder
*/
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n;
if (!(cin >> n) || n <= 0) {
return 0;
}
vector<long long> a(n + 1);
vector<long long> prefix(n + 1, 0);
for (int i = 1; i <= n; ++i) {
cin >> a[i];
prefix[i] = prefix[i - 1] + a[i];
}
const long long INF = 1e18;
vector<long long> dp(n + 1, INF);
dp[0] = 0; // 基础状态
// O(n^2) 动态规划
for (int i = 1; i <= n; ++i) {
for (int j = 0; j < i; ++j) {
long long seg_sum = prefix[i] - prefix[j];
long long cost = dp[j] + seg_sum * seg_sum;
if (cost < dp[i]) {
dp[i] = cost;
}
}
}
cout << dp[n] << "\n";
return 0;
}
考点归纳与备考建议
- 考纲匹配度:严格对标 CCF GESP 六级考纲重点,绝不超纲,注重基础算法与逻辑建模规范;
- 规范防范:所有代码严格以 C++11 标准编译运行,针对整数溢出、边界判断、空状态均做了详尽严整的防御性处理。
所有代码开源上传至 GitHub:yummy-code 仓库 · GESP 专题站:GESP WIKI
欢迎加入:C++ GESP/CSP 考级答疑群(688906745) 与 Java/Python交流群(982860385),点击可直接加群。
猜你想读 · 相关文章推荐
【树形结构DFS与子树平衡度极小化】GESP六级 / CSP-J 题解:luogu-P17458 [GESP202609 六级] 分树规划
CCF GESP 2026年9月认证(第十五次认证)C++ 六级试题,洛谷 P17458。本题严格遵循 CCF GESP 官方大纲规范,重点考察树形结构DFS与子树平衡度极小化。题目逻辑严密,模型典型,是深入理解与掌握信奥核心考点的经典范例。
【动态规划·路径计数】GESP六级 / CSP-J 题解:luogu-P1002 [NOIP2002 普及组] 过河卒
NOIP 2002 普及组第四题,洛谷 P1002。本题是算法竞赛与考级中学习网格动态规划(Grid DP)与基础递推模型不可跨越的教科书级经典题目,被广泛收录于 GESP 六级考级(动态规划考点)及 CSP-J 普及组核心必做题单。题目核心考察障碍物标记、网格走步递推方程构造以及 64 位整型溢出防范。题目难度⭐⭐☆...
【GESP】C++六级考试大纲知识点梳理, (5) 动态规划与背包问题
GESP C++六级官方考试大纲中,第5条考点标志着我们正式跨入了“算法设计”的深水区——动态规划。 (5)掌握简单动态规划的算法思想,能够使用代码解决相应的一维动态规划问题和简单背包问题。 {: .prompt-info} 本人也是边学、边实验、边总结,且对考纲深度和广度的把握属于个人理解。因此本文更多的不是一个教程...
OneCoder (lihongzheshuai)
一个中年人的自留地,记录学习 C++、GESP/NOI、Java、Python 与算法架构的心得体会。本站唯一网址:coderli.com