牛客小白月赛27 B.乐团派对

题目链接

题目描述

音乐是带给大家快乐的存在,而你的目标就是组建若干支乐队,让世界听到你们的演奏!

你目前有 nnn 位乐手,每位乐手只能进入一个乐队,但并不是每位乐手都能担大任,因此需要团队合作。第ii位乐手的能力值为 a[i]a[i]a[i],表示该位乐手所在乐队的人数必须大于等于 a[i]a[i]a[i]。在保证每位乐手都被分进一个乐队的情况下,乐队数量最多可以是多少?

输入描述:

第一行一个正整数 nnn,表示乐手人数,n≤105n\leq10^{5}n≤105。

第二行 nnn 个正整数 a[i]a[i]a[i],表示每位乐手的能力值,a[i]≤109a[i]\leq10^{9}a[i]≤109。

输出描述:

输出最多的乐队数量。若无法保证每位乐手都被分进一个乐队,则输出 −1-1−1。

示例1

输入

4
2 1 2 1

输出

3

首先这题的出处在这里 Codeforces Round #643 (Div. 2) B.Young Explorers
由于我之前做过了,所以很快就找到了原题,但是很遗憾,这题是修改过的,原题是不要求所有人都分组求最大组数,而这题的要求所有人都要分组求最大组数,那么我们必须从大往小挑,对某一个位置 iii,如果 a[i]>ia[i]>ia[i]>i,那么肯定输出 −1-1−1,如果 a[i]≤ia[i]\leq ia[i]≤i,就把 i−=a[i]i-=a[i]i−=a[i],直到 i=1i=1i=1 为止,这样一来很多人都觉得没问题了,其实还有一个坑点,比如:

3
2 2 2

照上面的分法就是输出 −1-1−1,其实答案是 111,不难发现,当 iii 减小后,如果出现 a[i]>ia[i]>ia[i]>i,那么此时的 a[i]a[i]a[i] 可以划分到上一组中而避免无法分组的情况
然后我提交了发现只过 93%,可能是数据加强了,后来找到了一个反例:

7
4 4 4 4 3 1 1

如果按我的分答案就是 222,如果把 333 划分到上一组可以得到 333 组,后来看了题解,这题只能用 DP 解决,我们先对a数组从小到大排序,设 dp[i]dp[i]dp[i] 为前 iii 个乐手最多能组成的乐队个数,那么有转移方程:
① i<a[i],dp[i]=0
② i>=a[i],dp[i]=max(dp[i-a[i]], dp[i-a[i]-1], …,dp[0])+1
所以我们边转移边维护一个前缀max数组,即可线性求出 dp[n]dp[n]dp[n]。最后看 dp[n]dp[n]dp[n] 是否为 0,若为 0 则输出 -1,否则输出 dp[n]dp[n]dp[n]。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e5+5;
int n,a[N],mx[N],ans;
main(){cin>>n;for(int i=1;i<=n;i++) cin>>a[i];sort(a+1,a+1+n);for(int i=1;i<=n;i++){if(i>=a[i]) ans=mx[i-a[i]]+1;else ans=0;mx[i]=max(mx[i-1],ans);}cout<<(ans?ans:-1);
}

牛客小白月赛27 B.乐团派对相关推荐

  1. 牛客小白月赛27部分题解(持续更新)

    今天打了一场牛客网的小白月赛,只做出来3题,自己好菜,怎么办呢,只能记录下来,用以砥砺自己,多刷题.QAQ 比赛连接:连接 首先是E题 E-使徒袭来 题目描述 神秘的使徒袭击了第三新东京市,少男少女们 ...

  2. 牛客小白月赛 27部分题解

    已做BCDEFGJ B.乐团派对 刚开始想了个贪心,结果不对然后直接转头想dp了. 将能力值排序. 首先我们先分出来一组,能力值最大的分出来一组人数是ana_nan​即下标是n−an+1→nn-a_n ...

  3. 牛客小白月赛27 题解

    比赛时有点事,赛后补了一下题 A 巨木之森 题意就不复述了, 这题的核心内容就是树的直径. 观察下面的图可以发现,一个点遍历整棵树的路程就是 所有的边*2 - 从这个点出发所到的最远距离.根据树的直径 ...

  4. 牛客小白月赛27题解(部分)

    链接:https://ac.nowcoder.com/acm/contest/6874 来源:nowcoder 文章目录 A 巨木之森(树的直径) B 乐团派对(贪心) D 巅峰对决(线段树) E 使 ...

  5. 牛客小白月赛16 小石的签到题(博弈)

    牛客小白月赛16 小石的签到题 链接:https://ac.nowcoder.com/acm/contest/949/A来源:牛客网 题目描述 输入描述: 共一行,输入一个数 nnn . 输出描述: ...

  6. F.孤独(牛客小白月赛39)

    F.孤独(牛客小白月赛39) 题意: 给定一棵树,寻找一个路径,将断掉所有与这个路径上的点相连的边,使得剩下的最大连通块的大小最小 题解: 这题有点印象,感觉做过,至少这个方法肯定遇到过 设dp[u] ...

  7. 牛客小白月赛58 B(暴力)C(思维)D(dp滚动数组优化)

    牛客小白月赛58 感觉没什么意思,这场月赛出题人有点问题. B 题意:给定一定的数据填充顺序和每一个填充层的名称,只有填充满了上一层才可以填充下一层. 但是每一层又属于某一个大层,一个大层中包含了若干 ...

  8. 牛客小白月赛65个人题解A-E

    1. 牛客小白月赛65 A. 牛牛去购物 题意:给定n元,购买价格为a元的篮球和价格为b的篮球,数量不定,要使得花掉的钱最多,也就是剩余的钱数最少,求这个值 (1 <= n, a, b < ...

  9. 牛客小白月赛24 J.建设道路

    牛客小白月赛24 J.建设道路 题目链接 题目描述 牛牛国有 nnn 个城市,编号为 1-n,第 iii 个城市有一个价值 aia_iai​ ,牛国的国王牛阔落特别喜欢在牛牛国旅游,并且他不想每次旅游 ...

最新文章

  1. python生成固定形状的词云图
  2. android 单例的作用,Android中单例模式的几个坑
  3. /etc/fstab文件出错,无法进入Linux系统
  4. 会议容易中吗_拉伸、缩放、比例,这些CAD中容易混淆的概念你搞清楚了吗?
  5. ECMAScript 运算符--逗号运算符
  6. 23种设计模式(二十)数据结构之迭代器
  7. 小团队管理与大团队管理
  8. html上传图片(进度条变化)、音乐
  9. 桌球小游戏(java)编程
  10. 华为主题锁屏壁纸换不掉_华为手机总出现一些不明照片咋回事,原来你没关闭这个默认设置...
  11. 论文笔记-Exploring Plain Vision Transformer Backbones for Object Detection
  12. 集合覆盖模型例题_集合实例(集合覆盖)
  13. 像素级图像融合常用方法
  14. Arcmap矢量数据的基础编辑
  15. 自然语言处理--基于 AIML 的模式匹配聊天机器人
  16. 有趣又漂亮的可视化图表制作
  17. httprunner踩坑之路
  18. chrome电脑棒 刷linux,其实已经够用:华硕Chromebit电脑棒评测
  19. 解决win10搜索框无法搜索本地应用或无任何反应
  20. Python中的数据可视化工具与方法——常用的数据分析包numpy、pandas、statistics的理解实现和可视化工具matplotlib的使用

热门文章

  1. pci总线协议学习笔记——PCI总线基本概念
  2. 刘知远老师-自然语言处理表示学习
  3. java设计模式——门面与调停
  4. 微信小程序之movable-view的direction用法
  5. CentOS7克隆虚拟机需要修改的配置
  6. Python之禅this
  7. kwebio/kweb-core:面向后端的轻量级 Kotlin Web 框架
  8. chap mysql借点_mysql必知必会-读书笔记(chap4-8)
  9. 微信程序开发之微信接入
  10. 数学建模:非线性规划的 Python 求解