题意:

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相关推荐

  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 - 10817 Headmaster's Headache

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

  4. 《算法竞赛入门经典——训练指南》第一章相关内容

    #<算法竞赛入门经典--训练指南>第一章相关内容 希望各位大牛能指导! 红色为已经做了的...黄色背景是还有不懂地方,希望在年前能刷完第一章啊.... 更新版.google上貌似又加了ex ...

  5. 紫书《算法竞赛入门经典》

    紫书<算法竞赛入门经典>题目一览 第3章 数组和字符串(例题) UVA 272 TEX Quotes UVA 10082 WERTYU UVA 401 Palindromes UVA 34 ...

  6. 提取了下刘汝佳推荐的题号...

    今天闲来没事上uva oj提取了下刘汝佳推荐的acm题号,原始数据如下: Volume 0. Getting Started    10055 - Hashmat the Brave Warrior ...

  7. UVA-10817- Headmaster's Headache(状压DP)

    UVA-10817- Headmaster's Headache 题意: 这间学校开设S门课,给出校长已经有的师资n,然后再给出m个应聘者,每门课至少有两名任课老师,求最少需要的雇佣工资. 分析: 这 ...

  8. 状态压缩DP UVa10817-Headmaster's Headache

    状态压缩是指使用计算机二进制位来存储状态,一般用法是将二进制串当做一个集合,bit位代表集合中的元素,bit位取值表示元素是否在集合中.n位二进制串可以描述2^n种集合(状态),因此对于n的取值是相当 ...

  9. 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 ...

最新文章

  1. 使用expect 打通到其他服务器无密码访问
  2. python自动化部署程序,聊聊Python自动化脚本部署服务器全流程(详细)
  3. origin如何绘制双y轴曲线_Origin用矩阵绘制多层曲面映射图
  4. PostgreSQL学习手册(二) 模式(Schema)
  5. ASP.NET (C#) 面试笔试题目收集
  6. 一起学习C语言:初步进入编程世界(三)
  7. 史密斯预估器matlab仿真,(毕业论文)史密斯预估器设计.doc
  8. 服务器模型---总结
  9. 物体检测学习笔记-3D相机成像原理简介
  10. 【原创】objdump 的使用
  11. 吉林大学老师蓝牙点名被赞“有创意”(图)
  12. PySpark | RDD
  13. 谈谈snprintf
  14. Java面试问题总结归纳
  15. HDOJ 4069 Squiggly Sudoku 精确覆盖+搜索
  16. 2021-05-31以及2021-06-01(从136开始) JAVA学习笔记
  17. Redis-NOSQL基础
  18. 芯科EFRBG22C112 empty工程创建
  19. 湖北汽车工业学院c语言程序设计 汽车零部件采购管理程序,C语言课程设计_汽车零部件采购程序.doc...
  20. 国货驶入快车道,这些礼业新趋势你抓住了吗?

热门文章

  1. 厉害了,如何通过双 key 来解决缓存并发问题?
  2. 基础知识真的是九阳神功吗?
  3. 一条简单的 SQL 执行超过1000ms,纳尼?
  4. 搞定高并发,岂能不懂Synchronized底层原理?
  5. 我们来谈下高并发和分布式中的幂等处理
  6. 为什么大多数同学宁愿吃学习的苦,也不愿意尝思考的痛?
  7. HashiCorp Nomad和遗留系统
  8. Linux中文件上传rz使用
  9. 佛系程序员的月薪五万指南
  10. Java注释@interface的用法【转】