Uva 10817 校长的烦恼
题目链接:https://uva.onlinejudge.org/external/108/10817.pdf
题意:m个教师,n个应聘者,s个课程,每个人的工资为c,每个人能教一些课程。求最少的支付费用,
使得,每个课程都有>=2名教师可以上,在职教师不能下岗。
分析:
dp(i,s1,s2)
已经考虑前 i 个人时,此时,课程只有一个人上的集合s1,两个或者以上的课程集合s2的最少费用;
关于课程集合:
首先一个老师的课程m0 = st&s0,就是他能上的没人上的课程集合,st&s1,就是他能上的一个人上的课程的集合,
选了他的话:
s2就是 s2 | m0;
s0就是 s0^m0;
s1 就是 (s1 ^ m1)减少的部分,加上 | m0.
还有,这里的输入很麻烦,没有确定每个人有多少课程。
首先用getline()输入一行,然后stringstream ss(line),用ss>>x不停的输入;
1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 #include <string> 5 #include <iostream> 6 #include<sstream> 7 8 using namespace std; 9 const int INF = 1000000000; 10 const int maxn = 125; 11 12 int m,n,s; 13 int c[maxn]; 14 int st[maxn]; 15 int d[maxn][1<<8][1<<8]; 16 17 18 19 int dp(int i,int s0,int s1,int s2) 20 { 21 if(i==m+n) return s2 == (1<<s)-1?0:INF; 22 23 int& ans = d[i][s1][s2]; 24 if(ans>=0) return ans; 25 26 ans = INF; 27 if(i>=m) ans = dp(i+1,s0,s1,s2); 28 29 int m0 = s0&st[i]; 30 int m1 = s1&st[i]; 31 32 s0 = s0^m0; 33 s1 = (s1 ^ m1) | m0; 34 s2 = s2 | m1; 35 36 ans = min(ans,c[i]+dp(i+1,s0,s1,s2)); 37 return ans; 38 39 } 40 41 int main() 42 { 43 int x; 44 string line; 45 while(getline(cin, line)) 46 { 47 stringstream ss(line); 48 ss >> s >> m >> n; 49 if(s == 0) break; 50 51 for(int i = 0; i < m+n; i++) 52 { 53 getline(cin, line); 54 stringstream ss(line); 55 ss >> c[i]; 56 st[i] = 0; 57 while(ss >> x) st[i] |= (1 << (x-1)); 58 } 59 memset(d, -1, sizeof(d)); 60 cout << dp(0, (1<<s)-1, 0, 0) << "\n"; 61 } 62 return 0; 63 }
转载于:https://www.cnblogs.com/TreeDream/p/6538231.html
Uva 10817 校长的烦恼相关推荐
- UVA 10187 校长的烦恼
可以用二进制表示子集,这种表示方法真的非常省时间空间,其中从右往左第i位(从0开始编号)表示元素i是否在集合中(1表示"在",0表示"不在") e.g. 二进制 ...
- 状压DP UVA 10817 Headmaster's Headache
题目传送门 1 /* 2 题意:学校有在任的老师和应聘的老师,选择一些应聘老师,使得每门科目至少两个老师教,问最少花费多少 3 状压DP:一看到数据那么小,肯定是状压了.这个状态不好想,dp[s1][ ...
- uva 10817——Headmaster's Headache
题意:某个学校有m个老师和n个求职者,需要讲授s个课程,已知每个人的工资c和能交的课程,求花费最小使得每门课程都至少有两个人教. 思路:状压dp,将每个老师要交的课程压缩成一个数,然后对于每门课,找到 ...
- UVA - 10817 Headmaster's Headache
题目大意:有一些老师,每一位都有自己的工资以及教授的课程.共s<=8个课程.其中的一些老师必须选择,问你保证每节课至少有一个老师的最少总工资. 题解: 首先很容易想到状态压缩,搞一个3进制的数, ...
- UVa在线比赛单题汇总-----DP专题
动态规划基础 例题 LA 3882 UVa 3882 - And Then There Was One 递推------------无力orz UVa 10635 10635 - Prince and ...
- NKOJ C2153「迎新春,贺新年,LJ24祝大家新年快乐」赛后总结帖by TangH
迎新春,贺新年,LJ24祝大家新年快乐 赛后谢罪反思 LJ24TangHaoLong「唐 浩滝」 Global Igoodvegetablea LJ24新春赛,实则是冬令营状压dp完结小测.OI赛制, ...
- 紫书《算法竞赛入门经典》
紫书<算法竞赛入门经典>题目一览 第3章 数组和字符串(例题) UVA 272 TEX Quotes UVA 10082 WERTYU UVA 401 Palindromes UVA 34 ...
- 预警数据一键升级工具_重磅 | 教务管理全新升级,“章鱼校长”助力机构实现轻松管理...
暑假开班,教务繁忙 今天小云为您送上一个重磅消息 教务管理系统「章鱼校长」全面上线啦!!! 可能会有校长问,为什么叫"章鱼校长"? 当培训机构校长太难了 要会招生.报名.排班.考勤 ...
- 云队友丨他是前斯坦福大学校长,谷歌母公司Alphabet现任董事长,他说谦逊是有效领导力的基础
砺石导语:<砺石读书>是『砺石商业评论』推出的聚焦全球商业经典的读书专栏,本期推荐的书籍是前斯坦福大学校长.谷歌母公司Alphabet现任董事长约翰·汉尼斯的著作<要领>,这本 ...
最新文章
- 30分钟搞定数据竞赛刷分夺冠神器LightGBM!
- 【Excle数据透视表】如何创建非共享缓存的数据透视表
- flock文件锁的学习和应用
- C/C++指针与内存管理
- 事件冒泡 bubbles cancelBubble stopPropagation() stopImmediatePropagation() 区别
- 注解@Component方式代替xml装配bean
- spring cloud微服务分布式云架构-config配置自动刷新
- android学习1:初识Activity
- 解决Element的 InfiniteScroll 无限滚动组件报错
- 基于SSM实现的房屋租赁系统【附源码】(毕设)
- psp记忆棒测试软件,psp记忆棒修复工具 ms-format
- 12306排队是什么意思_12306抢票显示排队中怎么办
- 华为p10刷原生android,华为p10怎么刷机 华为p10刷机方法【详细介绍】
- 医疗时钟系统的设计方案
- java数字转换金额大写——中文金额大写
- 华为网络计算机关闭屏幕保护,华为手机的屏幕保护太烦人了怎样才能关闭它
- 在线Java 动态运行Java源代码-执行器
- Python AutoCAD 注释
- 市场调研报告-全球与中国充气帆船市场现状及未来发展趋势
- [NOIP1999]Cantor表