题目链接: Boboniu Chats with Du

大致题意:

给你n个数字, 让你给这n个数字进行合理排序, 使得结果这n个数字之和最大.

条件: 如果某个位置i出现了大于m的数字, 则接下来的d个数字将不进行加和计算(如果后面不足d个数字则忽略到结束).

解题思路:

贪心即可.

我们将数字整体分为两类, a类为大于m的数字, b类为小于m的数字. 我们可以知道答案至少为所有b类数字之和.

倘若我们此时选择1个a类数字, 则我们一定要选最大的a类数字, 且一定要把他放在最后一位是最优的(因为这样不会导致后续d个数字失效).
倘若我们要选择2个a类数字, 我们也是要选择尽可能大的两个a类数字, 一个仍是放在最后一位, 另一个如果放在i位置, 则后面d个数我们最理想的是都放a类数字, 如果剩余的a类数组不足d个, 则我们需要放弃尽可能小的几个b类数字, 让其在后d位处.

此时我们就可以得出结论: 假设我们选择了num个a类数(剩下的a类数我们选择直接放弃), 则我们需要为其中的num-1个数后安排(num-1)*d个a类或b类数(a类优先, 其次b类较小的优先).

AC代码:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1E5 + 10;
int a[N], b[N], inda, indb;
ll s1[N], s2[N]; //前缀和
int main()
{int n, d, m; cin >> n >> d >> m;for (int i = 1; i <= n; ++i) {int x; scanf("%d", &x);if (x > m) a[++inda] = x;else b[++indb] = x;}sort(a + 1, a + 1 + inda, greater<>()); sort(b + 1, b + 1 + indb);for (int i = 1; i <= inda; ++i) s1[i] = s1[i - 1] + a[i]; for (int i = 1; i <= indb; ++i) s2[i] = s2[i - 1] + b[i];ll res = s2[indb]; //选择所有小于m的情况(不选择a类数的情况)for (int i = 0; i < inda; ++i) { //选择i+1个a类数的情况if (i * (d + 1) + 1 > n) break; //表明此时我们所选择的所有数字已经大于n个, 情况不存在int need = i * d; //需要的填充物int leave = inda - (i + 1); //a类能提供的填充物数量need = max(need - leave, 0); //避免是负数情况ll temp = s2[indb] - s2[need] + s1[i] + a[i + 1];res = max(res, temp);}cout << res << endl;return 0;
}

END

Boboniu Chats with Du(贪心 + 前缀和)相关推荐

  1. CodeForces - 1395D - Boboniu Chats with Du 贪心

    CodeForces - 1395D - Boboniu Chats with Du 贪心 题意:如果ai>ma_i>mai​>m,并且当天可以说话,则接下来ddd天不能说话.其余所 ...

  2. CodeForces - 1395D Boboniu Chats with Du(贪心)

    题目链接:点击查看 题目大意:给出一个长度为 n 的数列 a,现在可以对数列 a 进行重新排序,规定: 如果 a[ i ] > m 的话,那么接下来 d 天的数字不做贡献 否则没有影响 问如何排 ...

  3. codeforces-1395D Boboniu Chats with Du【前缀和】【枚举】

    题目 codeforces-1395D 题意 给出n个数的数组a,从1开始遍历数组 当a[i]<=m时,直接拿走a[i], 当a[i]>m时,拿走a[i],i后面的d个数不能拿,即a[i+ ...

  4. D. Boboniu Chats with Du (664 div2 贪心 枚举)

    D. Boboniu Chats with Du 题意: 给 n 个快乐值,你可以按任何顺序在群里说出快乐值为 kik_iki​ 的话,当 m<kim<k_im<ki​ 时,你会获得 ...

  5. A. Boboniu Chats with Du

    A. Boboniu Chats with Du 解题思路:先将>m的和<=m的分别统计一下,然后再来枚举>m的,每次的枚举的a个都必须有一个放在最后,对于剩下的a-1个,应该消耗( ...

  6. Codeforces1395 D. Boboniu Chats with Du(贪心)

    Have you ever used the chat application QQ? Well, in a chat group of QQ, administrators can muzzle a ...

  7. Codeforces 1395 D. Boboniu Chats with Du(贪心枚举答案)

    传送门 题意: 思路: 先把大于m的放在b数组,小于m的放在a数组 枚举一下最终结果中用了几个b,取一个最大值即可 看代码应该能明白(有注释) 代码: int a[MAXN],b[MAXN]; ll ...

  8. D. Boboniu Chats with Du

    传送门 分析 我太菜了,菜到这道题都没写出来 这道题的意思是给你一组序列,如果其中某一个数字大于给定的数字m,那么后面d个数字就会变成0,给你n个数字进行组合,要求最后这组序列的和最大 首先为了保证归 ...

  9. D. Boboniu Chats with Du(Codeforces Round #664 (Div. 2) )

    感受 怎么这么傻逼的题目,我现场A不了呢?看来还有不少提升的空间怎么这么傻逼的题目,我现场A不了呢?看来还有不少提升的空间怎么这么傻逼的题目,我现场A不了呢?看来还有不少提升的空间 题意 简单来说,给 ...

最新文章

  1. 水仙花数(3.1)(Java)
  2. ubuntu rar文件乱码
  3. 数据分析之道:抽丝剥茧,存乎一心(中)
  4. oracle转义字符
  5. android win7 共享网络打印机,win7系统设置共享网络打印机的操作方法
  6. Spring框架jar包分类(转)
  7. SpringBoot Idea快速创建工程
  8. python静态属性@property、类方法@classmethod、静态方法@staticmethod和普通方法
  9. 《Python游戏趣味编程》 第9章 贪吃蛇
  10. 力荐 | 台大林轩田《机器学习基石》资源汇总
  11. Python爬取IMDB TOP 250 电影榜单
  12. 注册表右键添加打开选项
  13. SNF开发平台-SNF.CodeGenerator-升级生成BS页面代码-支持视图-数据库配置-快速开发者的利器...
  14. Jvm与DVM与ART
  15. 苹果/安卓兼容性页面显示问题
  16. 如何定义 Symbian WINS模拟器的内存配置
  17. 电脑卸载神器 | 只有极客才会使用的卸载软件Geek Uninstaller
  18. 量子计算基础——矩阵语言
  19. 智慧非智能,智慧园区智慧在哪里?
  20. 小蜜蜂商城系统解析,结合众筹卖货活动,流水千万

热门文章

  1. 智慧健康杂志智慧健康杂志社智慧健康编辑部2023年第8期目录
  2. NMI -- 不可屏蔽中断
  3. python时间自动抢购华为手机软件,亲测可用2021新年福利!
  4. 解析机器人智能推理规划
  5. Unity Shader 卡通渲染 实时模型动画描边的研究
  6. Linux 下第一次使用MySQL遇到几种问题。
  7. 中国科学技术大学(中科大) StartOS 软件源开放啦
  8. 【优化求解】基于粒子群算法求解多目标优化问题matlab源码
  9. python 销售数据分析输出表格_Python实现将数据库一键导出为Excel表格的实例
  10. 毕业论文写作技巧大总结,从摘要到展望全清楚了