题目网址:https://vjudge.net/problem/UVA-10817
题意:
S门课程,M个教师,N个待聘教师。每个教师都有工资数和能够教授课程种类,要求在M个教师全部选择的基础上,再选择性的雇佣一部分待聘教师,在保证S门课程都至少有2人教授的前提下,付出的工资最少。s<8
思路:
我们通过课程信息来确定最终结果,用三个状态s0,s1,s2的二进制位来代表课程当前的状态,s0中的对应二进制位为1表示该课程没有人教授,s1为1表示该课程只有一个人教授,s2为1表示该课程至少两个人教授。
我们通过枚举每位待聘教师来确定最终的答案,很明显转移方程为 dpi = min(dp(i+1,news1,news2)+val[ i ] ,dp( i+1, s1,s2) )
即雇佣或者不雇佣该教师的最小值。
因为三个二进制状态的关系,所以我们只需要保留s1和s2就可以很轻易的算出s0 。s0= (s1|s2) ^(全为1);
接下来记忆化搜索一下就行。
代码如下:
#include
#include
#include
#include
#include
#include
#include
看了看紫书的思路,一遍过还是很开心的。