CF940E Cashback 题解
2022/4/14 23:16:36
本文主要是介绍CF940E Cashback 题解,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
这道题好像很烦,我第一眼看过去确实没有任何思路。
但是仔细分析题目后,我们会发现:
- \(c=1\) 时,答案为 0,但是好像没有这个点?
- \(c > n\) 时,答案为序列总和。
- \(c = n\) 时,答案为序列总和减去最小值。
- \(1 < c < n\) 且 \(n < 2 \times c\) 时,此时序列只能分为一段,而别的序列我们可以看成是长度为 1 的区间。
- \(1 < c < n\) 且 \(2 \times c \leq n\) 时,我们可以将序列分为多段,而此时别的序列仍然可以分割成长度为 1 的区间。
因此只有两种区间:长度为 1 和长度为 \(c\)。
接下来主要考虑 \(1 < c < n\) 的情况。
我们发现,此时问题就变成了一个 dp 问题。
设 \(f_i\) 表示到 \(a_i\) 截止时的答案,那么:
- \(1 \leq i < c\) 时:$$f_i = \sum_{j = 1}^{i}a_j$$
- \(c \leq i \leq n\) 时:$$f_i = \min{(f_{i - c} + sum_i - sum_{i - c} - minn_i,f_{i - 1} +a_i)}$$
其中 \(sum\) 是前缀和数组,\(minn_i\) 表示 \([i - c + 1,i]\) 这一段区间中的 \(a_i\) 的最小值。
然后发现 \(c\) 是确定的,于是对 \(minn_i\) 直接单调队列优化即可,总复杂度 \(O(n)\)。
Code:
/* ======== Plozia ========= Author:Plozia Problem:CF940E Cashback Date:2021/1/6 ========= Plozia ========= */ #include <bits/stdc++.h> using namespace std; typedef long long LL; const int MAXN = 1e5 + 10; int n, c, q[MAXN], l = 1, r = 0; LL a[MAXN], f[MAXN], minn[MAXN], sum[MAXN]; LL read() { LL sum = 0, fh = 1; char ch = getchar(); while (ch < '0' || ch > '9') {if (ch == '-') fh = -1; ch = getchar();} while (ch >= '0' && ch <= '9') {sum = (sum << 3) + (sum << 1) + (ch ^ 48); ch = getchar();} return sum * fh; } int main() { n = read(), c = read(); for (int i = 1; i <= n; ++i) a[i] = read(); for (int i = 1; i <= n; ++i) { while (l <= r && q[l] + c <= i) l++; while (l <= r && a[i] <= a[q[r]]) r--; q[++r] = i; minn[i] = a[q[l]]; sum[i] = sum[i - 1] + a[i]; } for (int i = 1; i < c; ++i) f[i] = f[i - 1] + a[i]; for (int i = c; i <= n; ++i) f[i] = min(f[i - c] + sum[i] - sum[i - c] - minn[i], f[i - 1] + a[i]); printf("%lld\n", f[n]); return 0; }
这篇关于CF940E Cashback 题解的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-03用LangChain构建会检索和搜索的智能聊天机器人指南
- 2025-01-03图像文字理解,OCR、大模型还是多模态模型?PalliGema2在QLoRA技术上的微调与应用
- 2025-01-03混合搜索:用LanceDB实现语义和关键词结合的搜索技术(应用于实际项目)
- 2025-01-03停止思考数据管道,开始构建数据平台:介绍Analytics Engineering Framework
- 2025-01-03如果 Azure-Samples/aks-store-demo 使用了 Score 会怎样?
- 2025-01-03Apache Flink概述:实时数据处理的利器
- 2025-01-01使用 SVN合并操作时,怎么解决冲突的情况?-icode9专业技术文章分享
- 2025-01-01告别Anaconda?试试这些替代品吧
- 2024-12-31自学记录鸿蒙API 13:实现人脸比对Core Vision Face Comparator
- 2024-12-31自学记录鸿蒙 API 13:骨骼点检测应用Core Vision Skeleton Detection