题目链接:https://codeforces.com/contest/1133/problem/C

题意:

给出 $n$ 个数,选取其中若干个数分别组成 $k$ 组,要求每组内最大值与最小值的差值不超过5,求 $k$ 组合起来最多可以放多少个数。

题解:

将 $a[1 \sim n]$ 从小到大排序,排序后每个组必定可以视为数组 $a$ 上一段连续区间,

$f[i][j]$ 表示到第 $i$ 个数为止,前面组成 $j$ 组,最多可以包含多少个数。

那么,考虑第 $i$ 个数选取与否,如果不选,那么 $f[i][j]=f[i-1][j]$;

如果选,那么必然是第 $i$ 个数所在组人数加上前面那些组人数,假设 $p$ 表示距离 $a[i]$ 左侧最远的那个位置(满足 $a[i]-a[p] \le 5$),$f[i][j]=(i-p+1)+f[p-1][j-1]$。

AC代码:

用lower_bound找 $p$,时间复杂度 $O(n \log n + nk)$。

#include<bits/stdc++.h>
using namespace std;
const int maxn=;
int n,k,ans;
int a[maxn];
int f[maxn][maxn];
int main()
{
ios::sync_with_stdio();
cin.tie(), cout.tie(); cin>>n>>k;
for(int i=;i<=n;i++) cin>>a[i];
sort(a+,a+n+); ans=f[][]=;
for(int i=;i<=n;i++)
{
int p=lower_bound(a+,a+i+,a[i]-)-a;
for(int j=;j<=min(k,i);j++)
{
f[i][j]=max(f[i-][j],(i-p+)+f[p-][j-]);
ans=max(ans,f[i][j]);
}
}
cout<<ans<<endl;
}

线性维护 $p$,时间复杂度 $O(nk)$。

#include<bits/stdc++.h>
using namespace std;
const int maxn=;
int n,k,ans;
int a[maxn];
int f[maxn][maxn];
int main()
{
ios::sync_with_stdio();
cin.tie(), cout.tie(); cin>>n>>k;
for(int i=;i<=n;i++) cin>>a[i];
sort(a+,a+n+); ans=f[][]=;
int p=;
for(int i=;i<=n;i++)
{
while(p<i && a[i]-a[p]>) p++;
for(int j=;j<=min(k,i);j++)
{
f[i][j]=max(f[i-][j],(i-p+)+f[p-][j-]);
ans=max(ans,f[i][j]);
}
}
cout<<ans<<endl;
}

Codeforces 1133E - K Balanced Teams - [DP]的更多相关文章

  1. Codeforces 544E K Balanced Teams (DP)

    题目: You are a coach at your local university. There are nn students under your supervision, the prog ...

  2. codeforces 1133E K Balanced Teams

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

  3. Codeforces Round #544 (Div. 3) E. K Balanced Teams (DP)

    题意:有\(n\)个人,每个人的能力值是\(a_i\),现在你想将这些人分成\(k\)组(没必要全选),但是每组中最高水平和最低水平的人的能力差值必须\(\le 5\),问最多能选多少人. 题解:想了 ...

  4. CF1133E K Balanced Teams(DP)

    /* 排序之后每个点往前能选择的是一段区间, 所以我们实际上转移位置是确定的 然后f[i][j]表示到了i选了j段的最大贡献, 显然状态数是O(n^2)的, 转移是O(1)的 */ #include& ...

  5. 【CF1133E】K Balanced Teams(动态规划,单调队列)

    [CF1133E]K Balanced Teams(动态规划,单调队列) 题面 CF 让你把一堆数选一些出来分成不超过\(K\)组,每一组里面的最大值和最小值之差不超过\(5\),求最多有多少个人元素 ...

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

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

  7. E. K Balanced Teams

    类比背包问题,为每个学生附加一个权重$pos[i]$,意思是选择该学生后,之后可以选择$p[i]~p[i]+5$的学生. 转换公式: $$d[i][j]=max(d[i+1][q],d[i+pos][ ...

  8. Codeforces Round #598 (Div. 3) E. Yet Another Division Into Teams dp

    E. Yet Another Division Into Teams There are n students at your university. The programming skill of ...

  9. Codeforces 1108D - Diverse Garland - [简单DP]

    题目链接:http://codeforces.com/problemset/problem/1108/D time limit per test 1 secondmemory limit per te ...

随机推荐

  1. OpenGL(十七) 绘制折线图、柱状图、饼图

    一.绘制折线图 glutBitmapCharacter(GLUT_BITMAP_8_BY_13,label[j])函数可以绘制GLUT位图字符,第一个参数是GLUT中指定的特定字形集,第二个参数是要写 ...

  2. python 教程 第六章、 模块

    第六章. 模块 1) 模块 sys模块 字节编译的.pyc文件,优化编译后生成pyo文件 2) from..import语句 import sys print 'The command line ar ...

  3. WPF中Binding使用StringFormat格式化字符串方法

    原文:WPF中Binding使用StringFormat格式化字符串方法 货币格式 <TextBlock Text="{Binding Price, StringFormat={}{0 ...

  4. TargetNullValue与FallbackValue

    原文:TargetNullValue与FallbackValue TargetNullValue与FallbackValue都是BindingBase的属性. TargetNullValue:获取或设 ...

  5. Xamarin 弹窗

    包括通知类弹窗和选择类弹窗,以下是安卓手机的显示效果 关键代码 DisplayAlert("Alert", "You have been alerted", & ...

  6. debian kill 进程等命令

    netstat -antup 查看所有进程   譬如Firefox现在僵死,无法相应请求.打开一个终端,输入: pgrep firefox 会返回数值,譬如是7198.现在输入: kill 7198 ...

  7. 去掉 Windows 中控件的虚线框(当当 element == QStyle::PE_FrameFocusRect 时,直接返回,不绘制虚线框)

    在 Windows 中,控件得到焦点的时候,会显示一个虚线框,很多时候觉得不好看,通过自定义 QProxyStyle 就可以把这个虚线框去掉. 1 2 3 4 5 6 7 8 9 10 11 12 1 ...

  8. 在 win10 环境下,设置自己写的 程序 开机自动 启动的方法

    原文:在 win10 环境下,设置自己写的 程序 开机自动 启动的方法 1.是登录自己用户时才能开机启 C:\Users\username\AppData\Roaming\Microsoft\Wind ...

  9. C++ Boost 学习资源列表

    文档书籍下载 Boost Documentation Boost代码下载       优秀网站导航 Boost官方网站 Boost中文站 Boost Consulting     专题资源报告 Lin ...

  10. vs2015 生成 cordova 页面中文乱码

    原文:vs2015 生成 cordova 页面中文乱码 1.用VS2015新创建Cordova项目,启动运行index.html 中文显示乱码 解决方案: 1.使用text/html通用解析编码utf ...