状压DP UVA 10817 Headmaster's Headache
题目传送门
1 /* 2 题意:学校有在任的老师和应聘的老师,选择一些应聘老师,使得每门科目至少两个老师教,问最少花费多少 3 状压DP:一看到数据那么小,肯定是状压了。这个状态不好想,dp[s1][s2]表示s1二进制表示下至少有1位老师的科目集合 4 s2表示至少有2位老师的科目集合所花费的最小金额,状态转移方程(01):dp[t1][t2]=min(dp[t1][t2],dp[j][k]+c[i]); 5 j,k为当前两个集合,t1,t2为转移后的集合,另外求t1,t2用到了& |位运算 1&1 == 1 1 & 0 == 0 0 & 0 == 0 6 最后,学习了不知道数字多少个时应该用字符串整行读入 7 详细解释 8 9 */ 10 /************************************************ 11 * Author :Running_Time 12 * Created Time :2015-8-10 14:44:30 13 * File Name :UVA_10817.cpp 14 ************************************************/ 15 16 #include <cstdio> 17 #include <algorithm> 18 #include <iostream> 19 #include <sstream> 20 #include <cstring> 21 #include <cmath> 22 #include <string> 23 #include <vector> 24 #include <queue> 25 #include <deque> 26 #include <stack> 27 #include <list> 28 #include <map> 29 #include <set> 30 #include <bitset> 31 #include <cstdlib> 32 #include <ctime> 33 using namespace std; 34 35 #define lson l, mid, rt << 1 36 #define rson mid + 1, r, rt << 1 | 1 37 typedef long long ll; 38 const int MAXN = 150; 39 const int INF = 0x3f3f3f3f; 40 const int MOD = 1e9 + 7; 41 int c[MAXN], p[MAXN], cnt[10]; 42 int dp[(1<<8)+10][(1<<8)+10]; 43 int s, m, n; 44 int mxs; 45 int sum, st1, st2; 46 47 int work(void) { 48 memset (dp, INF, sizeof (dp)); 49 dp[st1][st2] = sum; 50 for (int i=m+1; i<=m+n; ++i) { 51 for (int j=mxs; j>=0; --j) { 52 for (int k=mxs; k>=0; --k) { 53 if (dp[j][k] == INF) continue; 54 int t1 = (p[i] | j); int t2 = (p[i] & j) | k; 55 dp[t1][t2] = min (dp[t1][t2], dp[j][k] + c[i]); 56 } 57 } 58 } 59 return dp[mxs][mxs]; 60 } 61 62 int main(void) { //UVA 10817 Headmaster's Headache 63 while (scanf ("%d%d%d", &s, &m, &n) == 3) { 64 if (!s) break; 65 66 memset (cnt, 0, sizeof (cnt)); 67 memset (p, 0, sizeof (p)); 68 sum = 0, st1 = st2 = 0; mxs = (1 << s) - 1; 69 string str; 70 for (int i=1; i<=m+n; ++i) { 71 scanf ("%d", &c[i]); 72 getline (cin, str); 73 for (int j=0; str[j]; ++j) { 74 if (isdigit (str[j])) { 75 int x = str[j] - '0'; 76 p[i] |= 1 << (x - 1); 77 if (i <= m) ++cnt[x-1]; 78 } 79 } 80 if (i <= m) { 81 sum += c[i]; st1 |= p[i]; 82 } 83 } 84 for (int i=0; i<s; ++i) { 85 if (cnt[i] > 1) st2 |= (1 << i); 86 } 87 88 printf ("%d\n", work ()); 89 } 90 91 return 0; 92 }
转载于:https://www.cnblogs.com/Running-Time/p/4718419.html
状压DP UVA 10817 Headmaster's Headache相关推荐
- uva 10817——Headmaster's Headache
题意:某个学校有m个老师和n个求职者,需要讲授s个课程,已知每个人的工资c和能交的课程,求花费最小使得每门课程都至少有两个人教. 思路:状压dp,将每个老师要交的课程压缩成一个数,然后对于每门课,找到 ...
- UVA - 10817 Headmaster's Headache
题目大意:有一些老师,每一位都有自己的工资以及教授的课程.共s<=8个课程.其中的一些老师必须选择,问你保证每节课至少有一个老师的最少总工资. 题解: 首先很容易想到状态压缩,搞一个3进制的数, ...
- UVA-10817- Headmaster's Headache(状压DP)
UVA-10817- Headmaster's Headache 题意: 这间学校开设S门课,给出校长已经有的师资n,然后再给出m个应聘者,每门课至少有两名任课老师,求最少需要的雇佣工资. 分析: 这 ...
- UVa 11825 (状压DP) Hackers' Crackdown
这是我做状压DP的第一道题,状压里面都是用位运算来完成的,只要耐下心来弄明白每次位运算的含义,还是容易理解的. 题意: 有编号为0~n-1的n台服务器,每台都运行着n中服务,每台服务器还和若干台其他服 ...
- 状压DP学习总结 (详解,适合没状压dp基础的人学习,还在更新中,,,,)
本次博客,主要是给学弟学妹们讲解一下状压dp,不适合有基础的同学观看,可能会浪费时间,因为偏基础 先来最简单的一个吧 http://acm.hdu.edu.cn/showproblem.php?p ...
- POJ 1038 Bugs Integrated Inc (复杂的状压DP)
\(POJ~1038~~*Bugs~Integrated~Inc:\) (复杂的状压DP) \(solution:\) 很纠结的一道题目,写了大半天,就想练练手,结果这手生的.其实根据之前那道炮兵阵地 ...
- codeforces 8C. Looking for Order 状压dp
题目链接 给n个物品的坐标, 和一个包裹的位置, 包裹不能移动. 每次最多可以拿两个物品, 然后将它们放到包里, 求将所有物品放到包里所需走的最小路程. 直接状压dp就好了. #include < ...
- UVA10296 Jogging Trails(中国邮递员问题)(欧拉回路、一般图最大权匹配 / 状压DP)
整理的算法模板合集: ACM模板 目录 思路 UVA10296 Jogging Trails 题目翻译: 给你n个点,m条无向边,每条边有一定的距离数值,构造成一个连通图.问从任意一点出发,遍历所有的 ...
- POJ 2411 Mondriaan‘s Dream(最清楚好懂的状压DP讲解)(连通性状态压缩DP)
poj 2411 Mondriaan's Dream(最清晰的状压DP解析) 闫氏DP大法好 我们这里是一列一列地来,因为是一个棋盘性的状态压缩DP,从哪个方向都一样 摆放的小方格总方案数 等价于 横 ...
最新文章
- 【BFS】【并查集】【Tarjan】【LCA】Gym - 101173H - Hangar Hurdles
- 云炬随笔20171227
- 重温c语言之环境变量
- docker zookeeper kafka kafka-manager 本地hbase hadoop
- 台式计算机机箱都一样吗,别以为组装台式机很简单,机箱选择大有学问
- 如何优雅地测量一只猫的体积?
- Keil系列教程(汇总)
- 保险中介3.0时代:数字化中介在场景中打造核心竞争力
- DTcms-【需求】-需求分析
- 微信小程序前端服务外包
- 2020计算机考试内容,2020年全国计算机二级OFFICE考试内容
- 用docker在linux上安装qq和微信
- 如何利用电脑榨干闲置的带宽资源?
- 来自灵魂的拷问——知道什么是SQL执行计划吗?
- javaMail 发送邮件 标题过长出现乱码
- maven源码阅读之二(plexus-classworlds)
- 使用vue xlsx插件实现指定行数导入excel
- AAA企业信用等级证书
- cesium three性能比较_基督教/天主教/东正教/犹太教圣经简单比较
- java 添加附件_java发送邮件(一)--补充添加附件