Codeforce 1175 D. Array Splitting
新鲜热乎的题 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相关推荐
- Array Splitting
https://codeforces.com/contest/1175/problem/D 题解:贪心 1.可以视作k个后缀和相加(一定包含起点为1的后缀和): 2.除起点为1的后缀和排序,选择最大的 ...
- 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 ...
- 【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 ...
- 贪心: Array Splitting(数列分段)(洛谷CF1175D)
解析 这题可以转化一下: (<神笔马良>....) 计算这些长方形对应下标的总加和 我们可以一层一层往上垒,假设第i层起始点为xi,总和为sumi,再设从1到i的前缀和为si 显然第一层x ...
- 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 ...
- Codeforces- Educational Codeforces Round 69
A题 DIY Wooden Ladder 签到题,求n-2和第二大的最小值 #include<bits/stdc++.h> using namespace std; int arr[100 ...
- 可以编辑的下拉框数据js
///2008-05-13// var area = new Array(); area[0] = new Array("高碑店市","130684",&quo ...
- 自己的下拉框可以编辑的
var area = new Array(); area[0] = new Array("东城区","110101","北京市"); are ...
- 老男孩上海校区Python面试题
python面试题 第一章:python基础 数据类型: 1 字典: 1.1 现有字典 dict={'a':24,'g':52,'i':12,'k':33}请按字典中的 value 值进行排序? 1. ...
- Codeforce 1042 D. Petya and Array(树状数组、前缀和)
题目链接 省赛选拔学长说是CF的原题,赛后得知学长是用树状数组写的,补了一个树状数组的代码. 题意 NNN个数,问一共有多少个连续区间满足区间和小于 MMM 思路 记录每个数的前缀和sortsorts ...
最新文章
- 近期活动盘点:心电数据标注系统和深度学习诊断算法研究、2019年第六届清华大学大数据社会科学讲习班...
- JSP的基本构成详解
- Python爬虫介绍及实战入门
- boost::hash_range相关的测试程序
- java `Charset`或者`StandardCharsets`
- 如何分析解读systemstat dump产生的trc文件
- js面向对象的程序设计 --- 上篇(理解对象)
- 阿姆达尔定律(Amdahl's law)
- [学习笔记]java基础Java8SE开发环境搭建、第一个Java Hello World、Java程序的编译与执行...
- 自动阅读行业又出新招?离线阅读脚本套路满满
- oracle 恢复dmp数据,Oracle数据库使用DMP文件恢复数据
- ZigBee--CC2530单片机--按键控制LED灯
- 记录deecamp2018之旅
- png在ai转为路径_png格式转为ai格式
- OpenCV-白平衡(灰度世界算法)
- Flutter网格控件GridView
- 首家完成并购并进行重新备案公示的企业征信牌照公司-湖南省征信
- STM32+EC20实现4G无线通信
- 药物临床试验登记信息数据库18557条(2022年12月更新)
- ROS Stage学习
热门文章
- Android Studio Library生成jar包问题总结
- 备案号链接工信部_网站主页底部网站备案号的悬挂和链接的工作通知
- pythotn基础篇——条件分支与循环--3
- oracle case grouping,ORACLE GROUPING函数的使用
- python css selector_使用python处理selenium中的css_selector定位元素的模糊匹配问题
- java中怎么创建单列模式,java中的3种方式创建的单例模式
- 红旗Linux职称考试模块,计算机职称考试红旗Linux Desktop 6.0考试大纲
- redistemplate 设置永不过期_解决密码已过期,拒绝访问问题
- 帆软高级函数应用之层次坐标函数
- android接口类命名规范_Android开发规范