专栏文章
题解:P14242 [CCPC 2024 Shandong I] 分割序列
P14242题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @minjf155
- 此快照首次捕获于
- 2025/12/02 03:23 3 个月前
- 此快照最后确认于
- 2025/12/02 03:23 3 个月前
思路
这道题我们看上去很像是动态规划,于是我们设 表示 为 时,考虑了前 个数字时的最大答案。
发现空间复杂度为 ,炸飞了。
于是我们分析一下题目。
不难发现:每个数字至少会被加进答案一次。而一个数字如果会被加进答案两次,那么一定会是第一次的答案再加上这个数的值。即 等于 时,答案为全部数字相加,然后, 等于 时,答案一定为 等于 时的答案加上某一个后缀和。
发现这个有什么用呢,我们可以退出来一个结论:每一次的结果一定是上一次的答案加上。
于是,我们一开始求出后缀和,然后排序去求解即可。
代码不难。
CPPfor (int i = 1;i <= n;i++) read(a[i]);
for (int i = n;i > 0;i--) f[i] = f[i + 1] + a[i];
cnt = f[1],sort(f + 2,f + n + 1),write(cnt),putchar(' ');
for (int i = n;i > 1;i--) cnt += f[i],write(cnt),putchar(' ');
putchar('\n');
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...