题目描述

给定n个选手,将他们分成若干只队伍。其中第i个选手要求自己所属的队伍的人数大等于a[i]人。

在满足所有选手的要求的前提下,最大化队伍的总数。

注:每个选手属于且仅属于一支队伍。

输入输出格式

输入格式:

第一行一个整数n,表示人数。

以下n行,每行一个整数表示a[i]。

输出格式:

输出队伍总数的最大值。数据保证有解。

输入输出样例

输入样例#1: 复制

5
2
1
2
2
3
输出样例#1: 复制

2
分析:(贪心)

贪心的思想就是尽量将要求大的人放在一起。所以我们要先排个序,从大到小,然后用一个now表示当前队列还需多少个人可以满足条件 初始代码:

    now=a[1];
for (int i=1;i<=n;i++)
{
now--;
if (!now)
{
now=a[i];
s++;
w=false;
}
}

然后我们可以发现:

8

1 2 4 5 5 5 5 5

这一组数据中我们会将4归入第二个队列,导致第二个队列不成立,所以我们需要进行优化该情况。如果我们发现将目前在队列里的的归入前一个队列会更优的话我们就可以直接改变now

#include<cstdio>
#include<algorithm>
using namespace std;
int n,a[],now,s,maxs;
bool w;
bool cmp(int x,int y)
{
return x>y;
}
int main()
{
scanf("%d",&n);
for (int i=;i<=n;i++)
scanf("%d",&a[i]);
sort(a+,a++n,cmp);
w=true;//表示是否是第一个队列,如果是就不可以归入前一个队列了
now=a[];//从第一个开始
for (int i=;i<=n;i++)
{
if (a[i]<now&&!w)//比较
{
now=a[i];
}
now--;
if (!now)//一个队列已经满足要求
{
now=a[i];
s++;
w=false;
}
}
printf("%d",s);
}

(DP)

设 f[i]f[i] 表示前i个人能够分成的最大的队伍个数

从小到大排序一遍之后,显然可以发现,当第i个人可以加入这个队伍时,当且仅当 i>=a[i]i>=a[i]

所以可以得到一个转移方程: f[i]=max(f[k])+1(0<i<=a[i])f[i]=max(f[k])+1(0<i<=a[i])

但是这样对于百万级别的n是会超时的

考虑怎么去优化它

我们可以开一个数组来储存 f[1...n]f[1...n] 的最大值

则转移方程可以改成: f[i]=g[i-a[i]]+1f[i]=g[i−a[i]]+1

对于g数组的维护: g[i]=max(g[i-1],f[i])g[i]=max(g[i−1],f[i])

这样就可以完成O(n)转移


#include<bits/stdc++.h>
using namespace std;
int a[];
int f[];
int s[];
int main( )
{
int n;
scanf("%d",&n);
for(int i= ; i<=n ; i++)
scanf("%d",&a[i]);
sort(a+,a+n+);
for(int i= ; i<=n ; i ++)
{
if(i>=a[i])
f[i]=s[i-a[i]]+;
else
f[i]=;
s[i]=max(f[i],s[i-]);
}
printf("%d\n",f[n]);
}

 

P2062 分队问题(贪心orDP)的更多相关文章

  1. 洛谷P2062 分队问题

      这是一道普及/提高- 然后你懂的,贪心扫一遍就可以了. 不懂提交人数那么少. //Serene #include<algorithm> #include<iostream> ...

  2. P2062 分队问题(DP)

    题目描述 给定n个选手,将他们分成若干只队伍.其中第i个选手要求自己所属的队伍的人数大等于a[i]人. 在满足所有选手的要求的前提下,最大化队伍的总数. 注:每个选手属于且仅属于一支队伍. 输入输出格 ...

  3. 洛谷P2062 分队问题(dp)

    题意 题目链接 给定n个选手,将他们分成若干只队伍.其中第i个选手要求自己所属的队伍的人数大等于a[i]人. 在满足所有选手的要求的前提下,最大化队伍的总数. 注:每个选手属于且仅属于一支队伍. So ...

  4. 洛谷 P2062 分队问题

    这题太毒了....一开始就是死活想不到,结果看了很多遍题解,重新做的时候还是做不出来.. 好像有一点被错误的题解误导了? #include<cstdio> #include<algo ...

  5. 动态规划dp专题练习

    貌似开坑还挺好玩的...开一个来玩玩=v=... 正好自己dp不是很熟悉,就开个坑来练练吧...先练个50题?小目标... 好像有点多啊QAQ 既然是开坑,之前写的都不要了! 50/50 1.洛谷P3 ...

  6. HihoCoder1653 : 公平分队([Offer收割]编程练习赛39)(贪心)

    描述 小Hi和小Ho在玩一个战争游戏.游戏中2N个战斗单位,其中第i个单位的战斗力是Ai. 现在小Hi和小Ho要各选N个单位组成队伍,当然他们都希望自己队伍的总战斗力越大越好. 为了使分队更加公平,经 ...

  7. [ZJOI2005]午餐 (贪心,动态规划)

    题目描述 上午的训练结束了,THU ACM小组集体去吃午餐,他们一行N人来到了著名的十食堂.这里有两个打饭的窗口,每个窗口同一时刻只能给一个人打饭.由于每个人的口味(以及胃口)不同,所以他们要吃的菜各 ...

  8. Luogu2577 | [ZJOI2005]午餐 (贪心+DP)

    题目描述 上午的训练结束了,THU ACM小组集体去吃午餐,他们一行 \(N\) 人来到了著名的十食堂.这里有两个打饭的窗口,每个窗口同一时刻只能给一个人打饭.由于每个人的口味(以及胃口)不同,所以他 ...

  9. BZOJ 1692: [Usaco2007 Dec]队列变换 [后缀数组 贪心]

    1692: [Usaco2007 Dec]队列变换 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 1383  Solved: 582[Submit][St ...

随机推荐

  1. Go中使用动态库C/C++库

    转自:http://studygolang.com/articles/1441 最近需要做一些在go中使用动态C++库的工作,经常碰到找不到动态库路径这种情况,所以就花点时间,专门做一下实验来了解Go ...

  2. 关于jquery登录的一些简单验证。

    获取值之后的判断 $(function () { $("#btlogin").click(function () { var txtaccount = $("#txtac ...

  3. django examples 学习笔记(1)创建一个独立的python环境

    pip install virtualenv   创建一个虚拟环境 virtualenv   my_env      创建一个独立的环境 source my_env/bin/activate   激活 ...

  4. Java 数据类型间的相互转化

    Java中常见基本数据类型包括(String除外[引用]) Date(int year,int month,int day,int hour,int minute,int sec); String 格 ...

  5. JAVA基础知识总结4(面向对象特征之一:封装)

    封 装:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式. 好处:将变化隔离:便于使用:提高重用性:安全性. 封装原则:将不需要对外提供的内容都隐藏起来,把属性都隐藏,提供公共方法对其访问. th ...

  6. 服务器环境迁移,Linux centos7 64位 基础环境部署 jdk+tomcat+mysql+nginx

    最近阿里云服务器到期,这个周末连夜将服务器迁移到美国去了,为什么迁移到美国去呢?主要是因为阿里云服务器费用高,另外网站的访问量不大,对网速要求也不高,主要是宣传和信息传递的作用,加上本人之前在***上 ...

  7. 面试题: !=!=未看12 略多 sql语句练习 非常 有用

    JAVA面试总结 2015年03月25日 16:53:40 阅读数:4306 刚才看到的,先转载过来,没准以后用到…… 面试总结 2013年8月6日: 问题2:Hibernate的核心接口有哪些?   ...

  8. HTML5-A*寻路算法

    设置起点 设置终点 设置障碍 清除障碍 允许斜向跨越

  9. Pig Latin JOIN (inner) 与JOIN (outer)的区别

    1.内连接(自然连接): 只有两个表相匹配的行才能在结果集中出现 2.外连接: 包括 (1)左外连接(左边的表不加限制) (2)右外连接(右边的表不加限制) (3)全外连接(左右两表都不加限制) 3. ...

  10. fsck修复系统断电或非正常关机导致的系统磁盘问题

    问题描述: unexpected inconsistency; run fask mannally. (i.e., without -a or -p options) fsck repaire man ...