题目链接

题目大意:有S门课程,N名在职教师和M名求职者,每名在职教师或求职者都有自己能教的课程集合以及工资,要求花费尽量少的钱选择一些人,使得每门课程都有至少两人教。在职教师必须选。

可以把“每个课程已经分别有几个人教”作为状态来进行转移,每个人能教的课程集合作为“物品重量”,工资作为“价值”来更新dp值,类似01背包,每放进一个人,从后往前更新即可。

状态的表示可以用三进制编码,为了写起来舒服,我写了个结构体作为状态和编码转换的桥梁,也可以进行状态的“加法运算”,虽然速度比较慢就是了~~

有点想吐槽的是,出题人就不能把每个人能教的课程数量也放在输入里么?非逼得人家用getline嘛~~

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. const ll N=+,inf=0x3f3f3f3f;
  5. int k,n,m,d[(<<(N*))+],co,mx;
  6. string line;
  7. struct D {
  8. int a[N];
  9. int& operator[](int x) {return a[x];}
  10. D(int x=) {
  11. memset(a,,sizeof a);
  12. for(int i=; i<k; ++i,x/=)a[i]=x%;
  13. }
  14. D operator+(D& b) {
  15. D ret;
  16. for(int i=; i<k; ++i)ret[i]=min(a[i]+b[i],);
  17. return ret;
  18. }
  19. operator int() {
  20. int ret=;
  21. for(int i=k-; i>=; --i)ret=ret*+a[i];
  22. return ret;
  23. }
  24.  
  25. };
  26.  
  27. int main() {
  28. ios::sync_with_stdio();
  29. while(cin>>k>>n>>m&&k) {
  30. cin.ignore();
  31. memset(d,inf,sizeof d);
  32. d[]=;
  33. co=,mx=pow(,k)+0.5;
  34. while(n--) {
  35. getline(cin,line);
  36. stringstream ss(line);
  37. int x;
  38. ss>>x;
  39. co+=x;
  40. D t;
  41. while(ss>>x)t[x-]=;
  42. for(int i=mx-; i>=; --i)if(!d[i])d[D(i)+t]=;
  43. }
  44. for(int i=; i<mx; ++i)if(!d[i])d[i]=co;
  45. while(m--) {
  46. getline(cin,line);
  47. stringstream ss(line);
  48. ss>>co;
  49. int x;
  50. D t;
  51. while(ss>>x)t[x-]=;
  52. for(int i=mx-; i>=; --i) {
  53. d[D(i)+t]=min(d[D(i)+t],d[i]+co);
  54. }
  55. }
  56. printf("%d\n",d[mx-]);
  57. }
  58. return ;
  59. }

UVA - 10817 Headmaster's Headache (状压类背包dp+三进制编码)的更多相关文章

  1. UVa 10817 Headmaster's Headache (状压DP+记忆化搜索)

    题意:一共有s(s ≤ 8)门课程,有m个在职教师,n个求职教师.每个教师有各自的工资要求,还有他能教授的课程,可以是一门或者多门. 要求在职教师不能辞退,问如何录用应聘者,才能使得每门课只少有两个老 ...

  2. 状压DP UVA 10817 Headmaster's Headache

    题目传送门 /* 题意:学校有在任的老师和应聘的老师,选择一些应聘老师,使得每门科目至少两个老师教,问最少花费多少 状压DP:一看到数据那么小,肯定是状压了.这个状态不好想,dp[s1][s2]表示s ...

  3. UVA 10817 - Headmaster's Headache(三进制状压dp)

    题目:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=20&pag ...

  4. UVA 10817 Headmaster's Headache(DP +状态压缩)

    Headmaster's Headache he headmaster of Spring Field School is considering employing some new teacher ...

  5. UVa 10817 - Headmaster's Headache(状压DP)

    链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  6. UVA - 10817 Headmaster's Headache (状压dp+记忆化搜索)

    题意:有M个已聘教师,N个候选老师,S个科目,已知每个老师的雇佣费和可教科目,已聘老师必须雇佣,要求每个科目至少两个老师教的情况下,最少的雇佣费用. 分析: 1.为让雇佣费尽可能少,雇佣的老师应教他所 ...

  7. uva 10817 - Headmaster's Headache ( 状态压缩dp)

    本文出自   http://blog.csdn.net/shuangde800 题目链接: 点击打开链接 题目大意 某校有n个教师和m个求职者,已知每人的工资和能教的课程集合,要求支付最少的工资使得每 ...

  8. UVA - 10817 Headmaster's Headache

    题目大意:有一些老师,每一位都有自己的工资以及教授的课程.共s<=8个课程.其中的一些老师必须选择,问你保证每节课至少有一个老师的最少总工资. 题解: 首先很容易想到状态压缩,搞一个3进制的数, ...

  9. Travelling(HDU3001+状压dp+三进制+最短路)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3001 题目: 题意:n个城市,m条边,每条边都有一个权值,问你经过所有的城市且每条边通过次数不超过两次 ...

随机推荐

  1. 2015.7.14(大盘结束红色,中色连坐4T)

    中色今天的盘面相当有意思,现场直播庄家和散户斗法我估计中色要拉涨停了,不过你别跟,现在很危险了——就算是涨停,明天一个低开就把你给绕进去了 1.今天开市9:42发现中色的地位买入点良机16.13,此时 ...

  2. Python学习进程(13)文件与IO

        本节介绍基本的IO函数和文件的读写操作.     (1)读取键盘输入: Python用于读取键盘输入的函数有两个:raw_input与input. 1)raw_input函数 从标准输入读取一 ...

  3. 【Tech】SQL Server2008使用笔记

    1.64位win7系统报错“未在本地计算机上注册 Microsoft.ACE.OLEDB.12.0 ”. 解决方法:从这个网址下载和安装一个驱动http://www.microsoft.com/zh- ...

  4. nginx location proxy pass

    nginx: 192.168.1.23作为nginx反向代理机器 目标机器192.168.1.5上部署一个8090端口的nginx [root@localhost conf.d]# cat test. ...

  5. vector对象

    vector是模板而非类型,由vector生成的类型必须包含vector中元素的类型,例如vector<int> 定义和初始化vector对象: vector<T> v1    ...

  6. MySQL/MariaDB数据库备份与恢复之mysqlpump入门操作

    创建测试用表:MariaDB [music]>  create table summary(id int,info char(128));Query OK, 0 rows affected (0 ...

  7. FIND_IN_SET的简单使用

    FIND_IN_SET(str,strlist)函数 str 要查询的字符串 strlist 字段名 参数以”,”分隔 如 (1,2,6,8) 查询字段(strlist)中包含(str)的结果,返回结 ...

  8. iOS Font

    1. 非常棒的查看字体样貌网站: http://iosfonts.com 1. 查看设备支持字体: NSArray *familyNames = [NSMutableArray arrayWithAr ...

  9. VC 模拟CMD 匿名管道

    #include "stdafx.h" #include <Windows.h> #include <stdio.h> #include <stdli ...

  10. Python staticmethod

    1 @staticmethod 静态方法 when this method is called, we don't pass an instance of the class to it (as we ...