一、题目链接

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)的更多相关文章

  1. codeforces 1133E K Balanced Teams

    题目链接:http://codeforces.com/contest/1133/problem/E 题目大意: 在n个人中找到k个队伍.每个队伍必须满足最大值减最小值不超过5.求满足条件k个队伍人数的 ...

  2. K Balanced Teams CodeForces - 1133E (Dp)

    题意: 给出 n 个数,选取其中若干个数分别组成至多 k 组,要求每组内最大值与最小值的差值不超过5,求最后被选上的总人数. 题解: 将a[1∼n] 从小到大排序, f[i][j] 表示到第 i 个数 ...

  3. Codeforces 1133E - K Balanced Teams - [DP]

    题目链接:https://codeforces.com/contest/1133/problem/C 题意: 给出 $n$ 个数,选取其中若干个数分别组成 $k$ 组,要求每组内最大值与最小值的差值不 ...

随机推荐

  1. java保留2位小数及BigDecimal使用

    java保留两位小数的方法 import java.math.BigDecimal; import java.text.DecimalFormat; import java.text.NumberFo ...

  2. deno学习四 docker 运行官方的一个http file server

    github 上已经有人搞了一个deno 的docker 镜像,是基于源码编译的,挺好的 所以结合官方的http server demo 使用docker 运行 环境准备 docker-compose ...

  3. prime 又一个开源的基于graphql 的cms

    prime 是一个开源的基于graphql 的cms,类似的已经又好多了,strapi 就是一个(graphql 是通过插件扩展的) graphcms 是一款不错的,但是是收费的,prime 是基于t ...

  4. loki grafana 团队开源的,类似Prometheus 的log 系统

    Prometheus 主要面向的是metrics,但是loki 是log,这样加上grafana 强大的可视化以及alert能力, 我们可以做好多事情,loki 的设计来源于Prometheus. 组 ...

  5. WinForm读取指定的config文件的内容

    config文件的使用 一.缘起 最近做项目开始使用C#,因为以前一直使用的是C++,因此面向对象思想方面的知识还是比较全面的,反而是因没有经过完整.系统的.Net方面知识的系统学习,经常被一些在C# ...

  6. 艰苦的编译boost python (失败)

    1.下载 boost_1_67_0 2.在目录下执行 bootstrap 3.将python36添加到path环境变量 4.执行 b2 --with-python,将会声场如下dll 2018/04/ ...

  7. python列表(list)遍历

    list = ['html', 'js', 'css', 'python'] 遍历列表方法1:for i in list: print("序号:%s 值:%s" % (list.i ...

  8. Elasticsearch的脚本化数据导入导出

    我用的ES的版本是2.4.1,由于没有相应的命令实现数据的导入和导出,就是像mysql的那种mysqldump类似的指令. 更苦逼的是,我们的生产和测试环境,还不能联网,连ES的第三方的插件都没有办法 ...

  9. PHP CutyCapt生成网页url截图

    Requirements: 1,需要一个linux系统. 2, X-Server.(在命令行下实现对X-server的模拟,渲染图形进行缓存)-在没有安装X-Server的环境下提供图像渲染) Age ...

  10. Vivado HLS初识---阅读《vivado design suite tutorial-high-level synthesis》(5)

    Vivado HLS初识---阅读<vivado design suite tutorial-high-level synthesis>(5) 1.创建工程 启动vidado HLS co ...