CF740B Alyona and flowers 题解
2024-10-15 22:03:03
Content
有 \(n\) 个数 \(a_1,a_2,a_3,...,a_n\),给定 \(m\) 个区间,你可以选择一些区间使得它们的总和最大(也可以不选),求这个最大的总和。
数据范围:\(1\leqslant n,m\leqslant 100,-100\leqslant a_i\leqslant 100\)。
Solution
我们利用前缀和来求出每个区间的元素的和:设 \(s_i\) 表示前 \(i\) 个数的和,\([l,r]\) 为要表示的区间,那么这个区间的和就是 \(s_r-s_{l-1}\)。
然后我们将每个区间里的所有元素的和排序,然后按从大到小取,一旦取到了负数或者取完了,那我们就不取了,直接输出选的这些区间的总和。
Code
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int n, m, a[107], s[107], ss[107], ans;
bool cmp(int a, int b) {
return a > b;
}
int main() {
scanf("%d%d", &n, &m);
for(int i = 1; i <= n; ++i) {
scanf("%d", &a[i]);
s[i] = s[i - 1] + a[i];
}
for(int i = 1; i <= m; ++i) {
int l, r;
scanf("%d%d", &l, &r);
ss[i] = s[r] - s[l - 1];
}
sort(ss + 1, ss + m + 1, cmp);
for(int i = 1; i <= m; ++i) {
if(ss[i] <= 0) break;
ans += ss[i];
}
printf("%d", ans);
}
最新文章
- NHibernate Profiler使用方法
- Image Blending
- orcl的小技巧和分页
- C++标准转换运算符
- ecshop前台英文后台中文
- 内部类&;匿名内部类
- struts使用html:file上传文件的时候文件名乱码解决
- 内部技术分享的 PPT
- 关于异常“The &#39;Microsoft.ACE.OLEDB.12.0&#39; provider is not registered on the local machine”的处理
- git 菜鸟入门
- Android源码解析——AsyncTask
- 听晴明老师从头讲React Native(原价399)百度云下载 百度网盘
- C&;C++ Calling Convention
- Laravel--Artisan常用命令
- 通信原理之UDP协议(四)
- daterangepicker 使用方法总结
- C++11 实现生产者消费者双缓冲
- Asp.net &; Aspose.cells 导入
- Android 中调用本地命令
- 使用 XML-RPC 为 C++ 应用程序启用 Web 服务