Headmaster's Headache
题意:
s门课程,现任老师有m个给出工资,和他们能教的课,现在有n个应聘的老师,给出费用和能教的课程标号,求使每门课都至少有两个老师教的最小花费
分析:
n个老师选或不选有背包的特征,n很小想到用状压,s1表示每门课至少有一个老师教的情况,s2表示每门课至少有2个老师教的情况
起始状态是现任老师形成,dp[(j|ca[i])][(ca[i]&j)|k]=min(dp[(j|ca[i])][(ca[i]&j)|k],dp[j][k]+cost[i]); ca[i]是i个应聘者能教课程的状态
#include <map> #include <set> #include <list> #include <cmath> #include <queue> #include <stack> #include <cstdio> #include <vector> #include <string> #include <cctype> #include <complex> #include <cassert> #include <utility> #include <cstring> #include <cstdlib> #include <iostream> #include <algorithm> using namespace std; typedef pair<int,int> PII; typedef long long ll; #define lson l,m,rt<<1 #define pi acos(-1.0) #define rson m+1,r,rt<<11 #define All 1,N,1 #define read freopen("in.txt", "r", stdin) const ll INFll = 0x3f3f3f3f3f3f3f3fLL; const int INF= 0x3f3f3f3f; const int mod = 1000000007; int dp[1<<8][1<<8],s,m,n; int ca[200],cost[200],total; void solve(int s1,int s2){int ts=(1<<s)-1;memset(dp,0x3f,sizeof(dp));dp[s1][s2]=total;for(int i=m+1;i<=n+m;++i)for(int j=ts;j>=0;--j)for(int k=ts;k>=0;--k){if(dp[j][k]>=INF)continue;dp[(j|ca[i])][(ca[i]&j)|k]=min(dp[(j|ca[i])][(ca[i]&j)|k],dp[j][k]+cost[i]);}printf("%d\n",dp[ts][ts]); } int main() {char str[1000];int num[10];while(~scanf("%d%d%d",&s,&m,&n)){if(s==0&&m==0&&n==0)break;total=0;int s1=0,s2=0;memset(num,0,sizeof(num));for(int i=1;i<=n+m;++i){scanf("%d",&cost[i]);gets(str);ca[i]=0;for(int j=0;j<strlen(str);++j){if(isdigit(str[j])){int tmp=str[j]-'0';ca[i]|=(1<<(tmp-1));if(i<=m)num[tmp-1]++;}}if(i<=m){total+=cost[i];s1|=ca[i];}}for(int i=0;i<s;++i)if(num[i]>1)s2|=(1<<i);solve(s1,s2);} return 0; }
转载于:https://www.cnblogs.com/zsf123/p/4870281.html
Headmaster's Headache相关推荐
- 状压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进制的数, ...
- 《算法竞赛入门经典——训练指南》第一章相关内容
#<算法竞赛入门经典--训练指南>第一章相关内容 希望各位大牛能指导! 红色为已经做了的...黄色背景是还有不懂地方,希望在年前能刷完第一章啊.... 更新版.google上貌似又加了ex ...
- 紫书《算法竞赛入门经典》
紫书<算法竞赛入门经典>题目一览 第3章 数组和字符串(例题) UVA 272 TEX Quotes UVA 10082 WERTYU UVA 401 Palindromes UVA 34 ...
- 提取了下刘汝佳推荐的题号...
今天闲来没事上uva oj提取了下刘汝佳推荐的acm题号,原始数据如下: Volume 0. Getting Started 10055 - Hashmat the Brave Warrior ...
- UVA-10817- Headmaster's Headache(状压DP)
UVA-10817- Headmaster's Headache 题意: 这间学校开设S门课,给出校长已经有的师资n,然后再给出m个应聘者,每门课至少有两名任课老师,求最少需要的雇佣工资. 分析: 这 ...
- 状态压缩DP UVa10817-Headmaster's Headache
状态压缩是指使用计算机二进制位来存储状态,一般用法是将二进制串当做一个集合,bit位代表集合中的元素,bit位取值表示元素是否在集合中.n位二进制串可以描述2^n种集合(状态),因此对于n的取值是相当 ...
- Follow your heart (104)---headache quarrel and special experience on elance
even two are good friends, even u have the same target, sometimes, u still have many quarrels becaus ...
最新文章
- 使用expect 打通到其他服务器无密码访问
- python自动化部署程序,聊聊Python自动化脚本部署服务器全流程(详细)
- origin如何绘制双y轴曲线_Origin用矩阵绘制多层曲面映射图
- PostgreSQL学习手册(二) 模式(Schema)
- ASP.NET (C#) 面试笔试题目收集
- 一起学习C语言:初步进入编程世界(三)
- 史密斯预估器matlab仿真,(毕业论文)史密斯预估器设计.doc
- 服务器模型---总结
- 物体检测学习笔记-3D相机成像原理简介
- 【原创】objdump 的使用
- 吉林大学老师蓝牙点名被赞“有创意”(图)
- PySpark | RDD
- 谈谈snprintf
- Java面试问题总结归纳
- HDOJ 4069 Squiggly Sudoku 精确覆盖+搜索
- 2021-05-31以及2021-06-01(从136开始) JAVA学习笔记
- Redis-NOSQL基础
- 芯科EFRBG22C112 empty工程创建
- 湖北汽车工业学院c语言程序设计 汽车零部件采购管理程序,C语言课程设计_汽车零部件采购程序.doc...
- 国货驶入快车道,这些礼业新趋势你抓住了吗?