问题
仓库守卫,一共有N个仓库,有M人应聘首位,每个仓库最多一个守卫,一个守卫可以看管多个仓库,守卫i的能力值是 P i P_i Pi,薪资等于能力值,仓库的安全系数L等于 P i / K P_i/K Pi/K的整数部分, K K K是守卫 i i i看守的仓库数量
求最小安全系数的最大值,和此前提下的最小能力值总和
分析
和多重背包思路有点相似
分开计算,首先求最大最小安全系数 L(使用二分法或者DP),再求最小的能力值总和Y
状态:
L(i,j)代表为前i个守卫安排负责前j个仓库得到的最大最小安全系数
Y(i,j)代表为前i个守卫安排负责前j个仓库在符合要求的情况下(系数大于要求)得到的最小费用
状态转移方程是
L [ i ] [ j ] = m a x ( L [ i ] [ j ] , m i n ( v a l u e [ i ] / k , L [ i − 1 ] [ j − k ] ) ) , 0 < = k < = j L[i][j]=max(L[i][j],min(value[i]/k,L[i-1][j-k])),0<=k<=j L[i][j]=max(L[i][j],min(value[i]/k,L[i−1][j−k])),0<=k<=j
Y [ i ] [ j ] = m i n ( Y [ i ] [ j ] , v a l u e [ i ] + Y [ i − 1 ] [ j − k ] ) , 1