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);
}

最新文章

  1. NHibernate Profiler使用方法
  2. Image Blending
  3. orcl的小技巧和分页
  4. C++标准转换运算符
  5. ecshop前台英文后台中文
  6. 内部类&amp;匿名内部类
  7. struts使用html:file上传文件的时候文件名乱码解决
  8. 内部技术分享的 PPT
  9. 关于异常“The &#39;Microsoft.ACE.OLEDB.12.0&#39; provider is not registered on the local machine”的处理
  10. git 菜鸟入门
  11. Android源码解析——AsyncTask
  12. 听晴明老师从头讲React Native(原价399)百度云下载 百度网盘
  13. C&amp;C++ Calling Convention
  14. Laravel--Artisan常用命令
  15. 通信原理之UDP协议(四)
  16. daterangepicker 使用方法总结
  17. C++11 实现生产者消费者双缓冲
  18. Asp.net &amp; Aspose.cells 导入
  19. Android 中调用本地命令
  20. 使用 XML-RPC 为 C++ 应用程序启用 Web 服务

热门文章

  1. 花了30天才肝出来,史上最全面Java设计模式总结,看完再也不会忘
  2. redis实现最简单的锁
  3. 从零开始学Kotlin第四课
  4. ggplot 画堆叠柱状图
  5. 什么是GP、LP、PE、VC、FOF?
  6. 类成员函数调用delete this会发生什么呢?
  7. 在Kubernetes上安装Percona XtraDB集群
  8. MySQL自我保护参数
  9. int是几位;short是几位;long是几位 负数怎么表示
  10. 快速挂起VIM以及调出被挂起的VIM的方法