Round544div3E(1133E)
一、题目链接
https://codeforces.com/problemset/problem/1133/E
二、思路
显然要使用dp,因为中间有部分人不会选取。
令$dp[i][j]$表示在前$i$个人里面选择j组所能得到的最大人数。接下来就是0-1背包思想了。
对于第$i$个人,如果不选,那么$dp[i][j]=max(dp[i][j],dp[i-1][j])$;
如果选,那么$dp[i][j]=max(dp[i][j],dp[k][j-1]+i-k),0 \le k < i$。
这转移方程的时间复杂度是$O(N^3)$,显然会超时。
注意到,如果$a[i]==a[i-1]$,如果选择了$a[i-1]$,那么$a[i]$一定会选择。否则$a[i]$一定不会被选择。也就是说,如果两个人的数值相同,要么这两个人同时被选,要么同时都不被选。那么,可以对整个$a$数组去重,并记录每个数值代表的人数。令$a'$为去重后的数组,对于去重后的数组$a'$,上述式子$k$的选取不超过$5$,然后,把转移的代价由$i-k$改为$\sum\limits_{x=k+1}^{i}cnt[a'[x]]$即可。
三、代码
#include<bits/stdc++.h>
using namespace std;
;
int n, k;
int a[N];
int dp[N][N];
unordered_map<int, int> cnt;
int main() {
cin >> n >> k;
; i < n; ++i)scanf("%d", a + i), cnt[a[i]]++;
sort(a, a + n);
int m = unique(a, a + n) - a;
; i < m; ++i) {
; j <= k; ++j) {
;
; x--) {
)break;
cc += cnt[a[x]];
)dp[i][j] = max(dp[i][j], dp[i - ][j]);
)dp[i][j] = max(dp[i][j], dp[x - ][j - ] + cc);
)dp[i][j] = max(dp[i][j], cc);
}
}
}
cout << dp[m - ][k] << endl;
;
}
/*
6 1
2 7 12 13 14 12
11 4
2 7 13 12 15 17 23 24 25 31 36
7 2
2 4 10 11 17 18 19
7 1
1 1 1 6 6 6 7
11 2
1 2 2 7 9 15 16 23 24 23 25
**/
Round544div3E(1133E)的更多相关文章
- codeforces 1133E K Balanced Teams
题目链接:http://codeforces.com/contest/1133/problem/E 题目大意: 在n个人中找到k个队伍.每个队伍必须满足最大值减最小值不超过5.求满足条件k个队伍人数的 ...
- K Balanced Teams CodeForces - 1133E (Dp)
题意: 给出 n 个数,选取其中若干个数分别组成至多 k 组,要求每组内最大值与最小值的差值不超过5,求最后被选上的总人数. 题解: 将a[1∼n] 从小到大排序, f[i][j] 表示到第 i 个数 ...
- Codeforces 1133E - K Balanced Teams - [DP]
题目链接:https://codeforces.com/contest/1133/problem/C 题意: 给出 $n$ 个数,选取其中若干个数分别组成 $k$ 组,要求每组内最大值与最小值的差值不 ...
随机推荐
- Dev TextEdit 输入提示
TextEdit.Properties.NullValuePromptShowForEmptyValue = true; TextEdit.Properties.NullValuePrompt = “ ...
- mybatis 一对多,(多对一,一对一
多对一,和一对一是同一种写法,每种写法又分在数据库关联和在mybatis关联 1,多对一,一对一数据库关联 2,多对一,一对一mybatis关联 3,一对多,数据库关联,注意,Java type改of ...
- centos7 pptp 安装
1 安装 ppp yum install -y ppp 2 安装 pptpd yum install -y pptpd 3 编辑/etc/pptpd.conf 在最后 添加 localip 192. ...
- 最全Pycharm教程(1)——定制外观
http://blog.csdn.net/u013088062/article/details/50100121
- java类加载与static
一.类加载 当jvm去运行一个类时,会先加载该类,把该类在硬盘上字节码加载到jvm的内存.java HelloWorld>字节码会被加载到代码段中>加载过程中会有一些静态的常量,这部分会事 ...
- js中return ,return true,return false;区别
js中return:.return true.return false;区别 转:https://www.cnblogs.com/camikehuihui/p/7999537.html 一.返回控制与 ...
- 写了一个RenderInBackground的脚本
某主管希望write节点有多线程渲染的功能,而nuke中的render in background功能恰恰可以多个渲染任务同时执行,于是我考虑使用这个方法来实现. 调 试过程中发现renderinba ...
- 我的less学习之路
less注释 可以在代码中使用块样式(/* */)和行内注释(//),但是当编译LESS代码时,单行注释不会显示在CSS文件中.开发中主要维护的是less文件,所以可以使用行内注释,最终编译的css文 ...
- bzoj5006: [THUWC2017 Bipartite]随机二分图
某人在玩一个非常神奇的游戏.这个游戏中有一个左右各 nnn 个点的二分图,图中的边会按照一定的规律随机出现. 为了描述这些规律,某人将这些边分到若干个组中.每条边或者不属于任何组 (这样的边一定不会出 ...
- hadoop fs、hadoop dfs与hdfs dfs的区别
不多说,直接上干货! hadoop fs: 使用面最广,可以操作任何文件系统. hadoop dfs与hdfs dfs : 只能操作HDFS文件系统相关(包括与Local FS间的操作),前 ...