题目链接:点击查看

题目大意:给出一个长度为 n 的序列,需要自己定义一种顺序去遍历序列,每次需要维护答案:

  1. ans += sum
  2. sum += a[ i ]

有 k 次机会可以将 sum 清零,问如何遍历可以使得最后的 ans 最大

题目分析:首先不难看出,k 次清零操作可以将整个序列拆分成相互独立的 k + 1 个子段,而对于每个子段来说,假设其长度为 len,从头到尾遍历之后得到的贡献将是:b[ 1 ] * ( len - 1 ) + b[ 2 ] * ( len - 2 ) + ... + b[ len - 1 ] * 1,所以对于 sum > 0 时的前缀,直接贪心从大到小维护就好,当 sum < 0 时,再将这个前缀与剩下的未被遍历到的序列贪心去分组成 k + 1 组即可,比较显然的是,对于上面提到的序列 b 来说,从 1 ~ len 递减放置是最优的,所以可以选择一层一层去贪心

对于负数区域的贪心思想的话用官方题解的图示一眼就能看明白了:(从顶到底分别是 1 ~ len)

代码:

//#pragma GCC optimize(2)
//#pragma GCC optimize("Ofast","inline","-ffast-math")
//#pragma GCC target("avx,sse2,sse3,sse4,mmx")
#include<iostream>
#include<cstdio>
#include<string>
#include<ctime>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<stack>
#include<climits>
#include<queue>
#include<map>
#include<set>
#include<sstream>
#include<cassert>
#include<bitset>
using namespace std;typedef long long LL;typedef unsigned long long ull;const int inf=0x3f3f3f3f;const int N=1e6+100;int a[N];vector<int>node;int main()
{
#ifndef ONLINE_JUDGE
//  freopen("data.ans.txt","r",stdin);
//  freopen("data.out.txt","w",stdout);
#endif
//  ios::sync_with_stdio(false);int n,k;scanf("%d%d",&n,&k);k++;for(int i=1;i<=n;i++)scanf("%d",a+i);sort(a+1,a+1+n,greater<int>());LL ans=0,sum=0;for(int i=1;i<=n;i++){ans+=sum;sum+=a[i];if(sum<0){node.push_back(sum);for(int j=i+1;j<=n;j++)node.push_back(a[j]);reverse(node.begin(),node.end());break;}}for(int i=0;i<node.size();i++)ans+=1LL*node[i]*(i/k);printf("%lld\n",ans);return 0;
}

CodeForces - 1457E New Game Plus!(贪心)相关推荐

  1. codeforces Gym 100338E Numbers (贪心,实现)

    题目:http://codeforces.com/gym/100338/attachments 贪心,每次枚举10的i次幂,除k后取余数r在用k-r补在10的幂上作为候选答案. #include< ...

  2. Codeforces 671E Organizing a Race (贪心、线段树)

    题目链接 https://codeforces.com/contest/671/problem/E 题解 完全不会做--基本是抄lk的代码 ruogu的题解: https://www.luogu.co ...

  3. CodeForces - 1529E Trees of Tranquillity(贪心+线段树)

    题目链接:https://vjudge.net/problem/CodeForces-1529E 题目大意:给出两棵根节点为 111 的树,分别称为 AAA 树和 BBB 树,现在通过两棵树可以构造出 ...

  4. [CodeForces 1603C] Extreme Extension(贪心 + 数论分块优化dp)

    problem CodeForces solution observation1:\text{observation1}:observation1: 对于一个非空子段 [l,r][l,r][l,r], ...

  5. codeforces 416C C. Booking System(贪心)

    题目链接: codeforces 416C 题目大意: 给出n个请求,每个请求包括客人数量和支付金额,再给出m个桌子,包括桌子大小,问如何安排才能最大盈利.给出最大盈利和一个能够最大盈利的方案. 题目 ...

  6. Codeforces 540B School Marks 【贪心构造】

    题目链接:Codeforces 540B School Marks Little Vova studies programming in an elite school. Vova and his c ...

  7. CodeForces 508E Arthur and Brackets 贪心

    题目: E. Arthur and Brackets time limit per test 2 seconds memory limit per test 128 megabytes input s ...

  8. Codeforces 797C Minimal string【贪心】

    题意: 给出了字符串s的内容,字符串t,u初始默认为空,允许做两种操作: 1.把s字符串第一个字符转移到t字符串最后. 2.把t字符串最后一个字符转移到u字符串最后. 最后要求s.t字符串都为空,问u ...

  9. codeforces 719C (复杂模拟-四舍五入-贪心)

    题目链接:http://codeforces.com/problemset/problem/719/C 题目大意: 留坑... 转载于:https://www.cnblogs.com/A--Q/p/5 ...

最新文章

  1. 硬件手册里经常出现的assert以及deassert
  2. github 修改fork的代码之后如何提交代码并pull request
  3. 使用指定glibc编译程序
  4. Bluetooth GAP介绍
  5. CoSENT:比Sentence-BERT更有效的句向量方案
  6. 架构学习优秀网站整理
  7. java中map的put方法,Java TreeMap put()方法
  8. Kibana安装配置
  9. python autoit获取网页ajax数据_WebDriver + Python 调用AutoIt例子(实现139邮箱写信页的附件上传)...
  10. TensorFlow 基本问题思考
  11. java objective-c,Objective-C基础教程学习笔记(附录)从Java转向Objective-C
  12. 红黑树相关定理及其证明
  13. Angr安装与使用之使用篇(五)
  14. selenium2 原理和常用api
  15. SpringBoot项目:抽奖精灵
  16. 3d模型多怎么优化_硕士生金属3D打印斯特林发动机模型,使用3DXpert增长增材制造经验...
  17. 通俗讲解CDN是什么
  18. mpvue设置每个页面的标题,网上找的暴漏config对象的方法已经不能使用
  19. MLY -- 13.Error analysis:look at dev set examples to evaluate ideas
  20. jq实现复制文本功能

热门文章

  1. EventLoopGroup 的实例化
  2. 织入业务代码-IModifyService
  3. 语义化版本命名通行规则
  4. 缓存-分布式锁-分布式锁原理与使用
  5. 安装JAVA 运行环境
  6. Log4j的组件和配置文件介绍
  7. 阿里云OSS存储之SDK的使用
  8. Request_获取请求参数中文乱码问题处理
  9. 使用pip install出现超时警告的解决方法
  10. mysql自定义函数应用_mysql functions实例:在自定义函数中应用字符串函数