UVA-10817- Headmaster's Headache

题意:

这间学校开设S门课,给出校长已经有的师资n,然后再给出m个应聘者,每门课至少有两名任课老师,求最少需要的雇佣工资。

分析:

这个题的输入很奇怪,每个人的信息输入在一行上,不能简单地读取,需要用字符串处理操作。

已经有的师资是肯定要的,而对于求职者可以要可以不要,第一纬度状态就是当前的人,如果第二维度是开设的开设的课程的话,那么要把有一个老师任课的课程和有两个老师以上任课的课程都作为状态。

  • 位运算操作很重要,状压dp中状态转移,集合之间的交并集的处理很关键。
#include<bits/stdc++.h>
using namespace std;
const int maxn = 130;
const int INF = 1<<20;
int s,m,n,x;
int d[maxn][1<<8][1<<8];
int c[maxn],st[maxn];
int dp(int i,int s0,int s1,int s2)
{if(i==m+n)return s2 == (1<<s)-1 ? 0:INF;int &ans = d[i][s1][s2];if(ans>=0) return ans;ans = INF;if(i>=m)//不选当前求职者ans = dp(i+1,s0,s1,s2);int m0 = st[i] & s0;//没人讲的课中i可以讲的int m1 = st[i] & s1;//有一个人讲的课中,i可以讲的s0 ^= m0;//把s0中消去i讲的s1 = (s1 ^ m1) | m0;//把s1中去除i讲的m1,添加i讲的m0s2 |= m1;//添加i讲的m1到s2集合ans = min(ans,c[i]+dp(i+1,s0,s1,s2));return ans;
}
int main()
{string str;while(getline(cin,str)){memset(st,0,sizeof st);//下面是字符串流操作,每次输入一行的内容到strstringstream ss(str);ss>>s>>m>>n;if(s==0)break;for(int i=0;i<m+n;i++){getline(cin,str);stringstream ss(str);ss>>c[i];while(ss>>x)st[i] |= 1<<(x-1);}memset(d,-1,sizeof d);int ans = dp(0,(1<<s)-1,0,0);cout<<ans<<endl;}return 0;
}

转载于:https://www.cnblogs.com/1625--H/p/9902598.html

UVA-10817- Headmaster's Headache(状压DP)相关推荐

  1. 状压DP UVA 10817 Headmaster's Headache

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

  2. uva 10817——Headmaster's Headache

    题意:某个学校有m个老师和n个求职者,需要讲授s个课程,已知每个人的工资c和能交的课程,求花费最小使得每门课程都至少有两个人教. 思路:状压dp,将每个老师要交的课程压缩成一个数,然后对于每门课,找到 ...

  3. UVa 1633 Dyslexic Gollum(状压DP)

    题意 求有多少长度等于N(N≤400)N(N\leq 400)N(N≤400)的∑={0,1}\sum = \{0,1\}∑={0,1}字符串里面不包含长度大于等于k(k≤10)k(k \leq 10 ...

  4. UVA - 10817 Headmaster's Headache

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

  5. UVA - 11825 ——Hackers' Crackdown (状压DP)

    题目链接:https://vjudge.net/problem/UVA-11825 思路:每个电脑与它相邻的电脑都看成一个集合,求包含所有电脑的最多集合 dp[s]=max(dp[s],dp[s^s0 ...

  6. UVa 11759 洛克人的难题 状压dp

    题意: 你最初只有一个武器,你需要按照一定的顺序消灭n个机器人(n<=16).每消灭一个机器人将会得到他的武器.每个武器只能杀死特定的机器人.问可以消灭所有机器人的顺序方案总数. 分析: 基础的 ...

  7. UVa 11825 (状压DP) Hackers' Crackdown

    这是我做状压DP的第一道题,状压里面都是用位运算来完成的,只要耐下心来弄明白每次位运算的含义,还是容易理解的. 题意: 有编号为0~n-1的n台服务器,每台都运行着n中服务,每台服务器还和若干台其他服 ...

  8. 状压DP学习总结 (详解,适合没状压dp基础的人学习,还在更新中,,,,)

    本次博客,主要是给学弟学妹们讲解一下状压dp,不适合有基础的同学观看,可能会浪费时间,因为偏基础 先来最简单的一个吧   http://acm.hdu.edu.cn/showproblem.php?p ...

  9. POJ 1038 Bugs Integrated Inc (复杂的状压DP)

    \(POJ~1038~~*Bugs~Integrated~Inc:\) (复杂的状压DP) \(solution:\) 很纠结的一道题目,写了大半天,就想练练手,结果这手生的.其实根据之前那道炮兵阵地 ...

最新文章

  1. Glibc辅助运行库 (C RunTime Library): crt0.o,crt1.o,crti.o crtn.o,crtbegin.o crtend.o
  2. oracle新建用户和授权及其删除
  3. Android入门之AlertDialog
  4. C#学习笔记——软件注册与注册机
  5. SQL Server 性能优化之——系统化方法提高性能
  6. python class def 格式_Python symbol.classdef方法代码示例
  7. 16. GD32F103C8T6入门教程-adc 使用教程2-dma+连续扫描方式采集数据
  8. 清掉数据_大数据超详尽分析,带你看懂打野江湖
  9. 【2019.7.15】
  10. oracle 数据库官网下载流程
  11. 使用Java根据约定格式生成MySQL建表语句
  12. 信号处理电路整理(RC、运放、TTL)
  13. 车牌号识别 OpenCV
  14. Oracle12c CDB和PDB数据库的启动与关闭说明
  15. html中如何写平方根等,平方根一定是整数吗
  16. 3个工具助你玩转正则表达式
  17. 这是?国内跨境电商降本增收营销神器
  18. 大学计算机学cad的,征文通知:第二十二届中国计算机辅助设计与图形学(CADCG 2019)学术会议...
  19. 非华为电脑多屏协同安装最新的电脑管家
  20. 前端小动画之飘落的小雪花

热门文章

  1. MAC/Linux 下 Git 记住用户名密码
  2. Android2.2 API 中文文档
  3. Linux下的硬件驱动——USB设备(下)
  4. 生活不可缺的46个搜索引擎
  5. LeetCode数据库 177. 第N高的薪水
  6. 利用根轨迹法进行控制系统的分析和设计
  7. 图解算法之排序算法(2)——选择排序
  8. oracle ora-14404,分区表的分区表空间不同引起的删除表空间错误
  9. python输入名字配对情侣网名_输入姓名配对qq网名,QQ情侣昵称
  10. centos7 ftp服务器搭建_CentOS7下搭建Jellyfin个人流媒体服务器