uva 10817 - Headmaster's Headache ( 状态压缩dp)

时间:2024-04-21 21:34:34

本文出自   http://blog.****.net/shuangde800


题目链接: 点击打开链接

题目大意

某校有n个教师和m个求职者,已知每人的工资和能教的课程集合,要求支付最少的工资使得每门课都至少有两名教师教学。在职教师必须招聘。

思路

这题不太好想,搞了很久。。

f[s1][s2]: s1表示课程集合{ s1 }都至少有一个教师教的情况。

s2表示课程集合{ s2 }都至少有两个教师教的情况。

每个求职者的pi, 对于每个求职者,要么选,要么不选,就是01背包问题。

对于s1,s2,可以根据当前枚举到的求职者课程即可,可推出下一个状态:

nextS1 = p[i] | s1,

nextS2 = (p[i] & s1) | s2

f[nextS1][nextS2] = min(f[nextS1][nextS2], f[s1][s2] + p[i])

代码