新鲜热乎的题 Codeforce 1175 D。

题意:给出一个长度为$n$的序列$a$,你需要把它划分为$k$段,每一个元素都需要刚好在其中一段中。分好之后,要计算$\sum_{i=1}^{n} (a_i \centerdot f(i))$,使这个值最大。其中$f(i)$代表第$i$个元素被分在第几段中。简单来说,就是每个元素被分在第几段中就需要乘上几,使序列的和最大。

假设$sum$是$a$的前缀和,$k$个分割点分别为$l_j$,将序列分割为$[1, l_1],[l_1 + 1, l_2]......[l_{k-1} + 1, l_k]$,那么第$j$段对总和的贡献是$(sum_{l_j} - sum_{l_{j-1}}) * j$。

由此,总和应该为$sum_{l_1} + (sum_{l_2} - sum_{l_1}) * 2 + (sum_{l_3} - sum_{l_2}) * 3+……+(sum_{l_k} - sum_{l_{k-1}}) * k$,很显然,相邻两项之间存在可以抵消的部分,同时$l_k$一定为$n$。将其化简:$sum_n \centerdot k - sum_{l_1} - sum_{l_2} -……-sum_{l_{k-1}}$,那么我们只需要在前$n-1$项的前缀和中找出最小的$k-1$个就可以得到最大的总和了。

int n, k;
int a;
ll sum[maxn];
int main() {scanf("%d %d", &n, &k);priority_queue<ll, vector<ll>, greater<> > q;for(int i = 1; i <= n; ++i) {scanf("%d", &a);sum[i] = sum[i - 1] + a;if(i != n)q.push(sum[i]);}ll ans = sum[n] * k;for(int i = 1; i <= k - 1; ++i) {//找出最小的k-1个前缀和ans -= q.top();q.pop();}printf("%lld\n", ans);
}

转载于:https://www.cnblogs.com/sun-of-Ice/p/10982844.html

Codeforce 1175 D. Array Splitting相关推荐

  1. Array Splitting

    https://codeforces.com/contest/1175/problem/D 题解:贪心 1.可以视作k个后缀和相加(一定包含起点为1的后缀和): 2.除起点为1的后缀和排序,选择最大的 ...

  2. Array Splitting CodeForces - 1197C

    You are given a sorted array a_1, a_2, \dots, a_na1​,a2​,-,an​ (for each index i > 1i>1 condit ...

  3. 【CodeForces - 1197C】Array Splitting(水题)

    题干: You are given a sorted array a1,a2,-,ana1,a2,-,an (for each index i>1i>1 condition ai≥ai−1 ...

  4. 贪心: Array Splitting(数列分段)(洛谷CF1175D)

    解析 这题可以转化一下: (<神笔马良>....) 计算这些长方形对应下标的总加和 我们可以一层一层往上垒,假设第i层起始点为xi,总和为sumi,再设从1到i的前缀和为si 显然第一层x ...

  5. Codeforces Round #440 (Div. 2, based on Technocup 2018 Elimination Round 2)

    一场挺简单的CF,但是我打炸了啊 A. Search for Pretty Integers time limit per test 1 second memory limit per test 25 ...

  6. Codeforces- Educational Codeforces Round 69

    A题 DIY Wooden Ladder 签到题,求n-2和第二大的最小值 #include<bits/stdc++.h> using namespace std; int arr[100 ...

  7. 可以编辑的下拉框数据js

    ///2008-05-13// var area = new Array(); area[0] = new Array("高碑店市","130684",&quo ...

  8. 自己的下拉框可以编辑的

    var area = new Array(); area[0] = new Array("东城区","110101","北京市"); are ...

  9. 老男孩上海校区Python面试题

    python面试题 第一章:python基础 数据类型: 1 字典: 1.1 现有字典 dict={'a':24,'g':52,'i':12,'k':33}请按字典中的 value 值进行排序? 1. ...

  10. Codeforce 1042 D. Petya and Array(树状数组、前缀和)

    题目链接 省赛选拔学长说是CF的原题,赛后得知学长是用树状数组写的,补了一个树状数组的代码. 题意 NNN个数,问一共有多少个连续区间满足区间和小于 MMM 思路 记录每个数的前缀和sortsorts ...

最新文章

  1. 近期活动盘点:心电数据标注系统和深度学习诊断算法研究、2019年第六届清华大学大数据社会科学讲习班...
  2. JSP的基本构成详解
  3. Python爬虫介绍及实战入门
  4. boost::hash_range相关的测试程序
  5. java `Charset`或者`StandardCharsets`
  6. 如何分析解读systemstat dump产生的trc文件
  7. js面向对象的程序设计 --- 上篇(理解对象)
  8. 阿姆达尔定律(Amdahl's law)
  9. [学习笔记]java基础Java8SE开发环境搭建、第一个Java Hello World、Java程序的编译与执行...
  10. 自动阅读行业又出新招?离线阅读脚本套路满满
  11. oracle 恢复dmp数据,Oracle数据库使用DMP文件恢复数据
  12. ZigBee--CC2530单片机--按键控制LED灯
  13. 记录deecamp2018之旅
  14. png在ai转为路径_png格式转为ai格式
  15. OpenCV-白平衡(灰度世界算法)
  16. Flutter网格控件GridView
  17. 首家完成并购并进行重新备案公示的企业征信牌照公司-湖南省征信
  18. STM32+EC20实现4G无线通信
  19. 药物临床试验登记信息数据库18557条(2022年12月更新)
  20. ROS Stage学习

热门文章

  1. Android Studio Library生成jar包问题总结
  2. 备案号链接工信部_网站主页底部网站备案号的悬挂和链接的工作通知
  3. pythotn基础篇——条件分支与循环--3
  4. oracle case grouping,ORACLE GROUPING函数的使用
  5. python css selector_使用python处理selenium中的css_selector定位元素的模糊匹配问题
  6. java中怎么创建单列模式,java中的3种方式创建的单例模式
  7. 红旗Linux职称考试模块,计算机职称考试红旗Linux Desktop 6.0考试大纲
  8. redistemplate 设置永不过期_解决密码已过期,拒绝访问问题
  9. 帆软高级函数应用之层次坐标函数
  10. android接口类命名规范_Android开发规范