ZR#954 分组
ZR#954 分组
解法:
设 $ f[i][a][b] $ 表示考虑了排序后的前 $ i $ 个人,目前已经有 $ a $ 个组配好了,还有 $ b $ 个组只有组员没有组长的最小代价。转移时,考虑当前的人是作为组长,加入一个已经有组员的组,还是作为组员新建一个组即可。
然后对于有的人重要程度相同的情况,我们需要想办法继续保证组长在组员的后面。则对于重要程度相同的两个人,我们按照他们的志愿排序:先是只能当组员的,然后是都可以的,然后是只能当组长的。
时间复杂度:$ O(nk^2) $ ,可以通过前 3 个子任务。
然后因为如果 $ k \times 2 > n $ ,一定无解,所以特判一下就好了。
CODE:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define LL long long
#define N 1001000
#define INF 0x3f3f3f3f3f3f3f3fll
LL n,k,f[2][1010][1010];
struct Neo {
LL w,s,p;
}a[N];
inline bool cmp(Neo x,Neo y) {
if(x.w != y.w)
return x.w < y.w;
return x.p < y.p;
}
int main() {
scanf("%lld%lld",&n,&k);
for(int i = 1 ; i <= n ; i++) {
scanf("%lld%lld%lld",&a[i].w,&a[i].s,&a[i].p);
if(a[i].p == 1) a[i].p = 3;
else if(a[i].p == 2) a[i].p = 1;
else if(a[i].p == 3) a[i].p = 2;
}
if(2 * k > n) {
puts("-1");
return 0;
//system("pause");
}
sort(a+1,a+n+1,cmp);
memset(f,0x3f,sizeof(f));
f[0][0][0] = 0;
int now = 1,las = 0;
for(int i = 1 ; i <= n ; i++) {
for(int j = 0 ; j <= k ; j++) {
for(int l = 0 ; j + l <= k ; l++) {
f[now][j][l] = f[las][j][l];
if(a[i].p < 3) {
if(l >= 1) f[now][j][l] = min(f[now][j][l],f[las][j][l - 1] + a[i].s);
}
if(a[i].p > 1) {
if(j >= 1) f[now][j][l] = min(f[now][j][l],f[las][j - 1][l + 1]+a[i].s);
}
}
}
swap(now,las);
}
if(f[las][k][0] >= INF) {
puts("-1");
return 0;
}
printf("%lld \n",f[las][k][0]);
//system("pause");
return 0;
}
ZR#954 分组的更多相关文章
- 2 weekend110的hadoop的自定义排序实现 + mr程序中自定义分组的实现
我想得到按流量来排序,而且还是倒序,怎么达到实现呢? 达到下面这种效果, 默认是根据key来排, 我想根据value里的某个排, 解决思路:将value里的某个,放到key里去,然后来排 下面,开始w ...
- Hadoop(18)-MapReduce框架原理-WritableComparable排序和GroupingComparator分组
1.排序概述 2.排序分类 3.WritableComparable案例 这个文件,是大数据-Hadoop生态(12)-Hadoop序列化和源码追踪的输出文件,可以看到,文件根据key,也就是手机号进 ...
- 一条Sql语句分组排序并且限制显示的数据条数
如果我想得到这样一个结果集:分组排序,并且每组限定记录集的数量,用一条SQL语句能办到吗? 比如说,我想找出学生期末考试中,每科的前3名,并按成绩排序,只用一条SQL语句,该怎么写? 表[TScore ...
- xamarin android ListView手动分组
xamarin的listview控件其实自带有分组方法,关于xamarin listview的自带分组方法请自行参考官方文档,我这里只写自己写的分组方法.xamarin自带的分组好是好,功能多,但是加 ...
- [Java Collection]List分组之简单应用.
前言 今天有一个新需求, 是对一个List进行分组, 于是便百度到一些可用的代码以及我们项目使用的一些tools, 在这里总结下方便以后查阅. 一: 需求 现在我们一个数据库表t_series_val ...
- TSQL 分组集(Grouping Sets)
分组集(Grouping Sets)是多个分组的并集,用于在一个查询中,按照不同的分组列对集合进行聚合运算,等价于对单个分组使用“union all”,计算多个结果集的并集.使用分组集的聚合查询,返回 ...
- SQL Server 动态行转列(参数化表名、分组列、行转列字段、字段值)
一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 实现代码(SQL Codes) 方法一:使用拼接SQL,静态列字段: 方法二:使用拼接SQL, ...
- SolrNet高级用法(分页、Facet查询、任意分组)
前言 如果你在系统中用到了Solr的话,那么肯定会碰到从Solr中反推数据的需求,基于数据库数据生产索引后,那么Solr索引的数据相对准确,在电商需求中经常会碰到菜单.导航分类(比如电脑.PC的话会有 ...
- MongoDB分组汇总操作,及Spring data mongo的实现
转载请在页首注明作者与出处 一:分组汇总 1.1:SQL样例 分组汇总的应用场景非常多,比如查询每个班级的总分是多少,如果用关系形数据库,那么sql是这样子的 ),class from score g ...
随机推荐
- 一个因MySQL大小写敏感导致的问题
做一个积极的人 编码.改bug.提升自己 我有一个乐园,面向编程,春暖花开! 00 MYSQL对大小写敏感 见字如面,见标题知内容.你有遇到过因为MYSQL对大小写敏感而被坑的体验吗? 之前看过阿里巴 ...
- Angular 惰性路由
根路由上的一个 loadChildren 属性,设置为一个字符串.这样就是惰性路由了. angular6 这样写:loadChildren: './background-check/backgroun ...
- JSP JSONArray使用遇坑!添加以下6个jar包
1.JAR包简介 要使程序可以运行必须引入JSON-lib包,JSON-lib包同时依赖于以下的JAR包: commons-lang.jar commons-beanutils.jar commons ...
- 【转】[STL]vector和deque的内存释放(clear)
vector的clear成员函数可以清除vector中的元素,使其大小减至0.但它却不能减小vector占用的内存. [cpp] view plain copy int main() { vector ...
- nexus 匿名用户的问题。
为了做到安全和不浪费我们自己的服务器资源,要绝对拒绝匿名用户进行访问: 1,不允许匿名用户访问 2,禁用匿名的账号 以下是这2点的设置图. ============================== ...
- Recastnavigation 创建 off-mesh link 的潜规则
Recastnavigation 在创建off-mesh link 时,发现有的off-mesh link 无法寻路(虽然在地图上能看到off-mesh link 的连线 在Google Grou ...
- vue 2.0 + 如何实现加入购物车,小球飞入的动画
github源码地址:https://github.com/13476075014/node-vue/tree/master/mynodeproject/13.sell/sell 在移动端经常会有加入 ...
- 在textarea和input光标处插入内容,支持ie
项目需求,用户要能够输入和点击外面的公式去插入到textaera中,试了好几种方法,有的是在谷歌下好使,在ie下不好使,最后找到了下面这个方法,目前在ie8以上都可以生效.直接上代码 function ...
- SQL alchemy
SQL alchemy介绍 SQL alchemy是orm思想的一个具体实现的产品 orm:对象关系映射思想 Object Relational Mapping 就是将数据库里的资源与面向对象中的类和 ...
- CAS客户端认证流程
CAS登陆流程 Step 1:浏览器向CAS客户端发起登陆请求,CAS客户端生成“登陆URL”,并把浏览器重定向到该URL 登陆URL: https://${cas-server-host}:${ca ...