https://www.luogu.org/problemnew/show/P2577
题解
这其实是一个背包问题的变形,如果只有一个窗口的话,对于排队打饭的时间是固定的,那么只要按照谁吃的慢谁先上就可以得出最优值。
这道题有两个窗口,贪心的方法还是一样的,但是需要考虑分配问题。
设dp[i][j][k]
: 下标:前i个人在窗口1花了j的打饭时间,在窗口2花了k的打饭时间。值: 前i个人最小的用餐时间。
设打饭时间为a
,吃饭时间为b
。
状态转移方程很容易写出来:
考虑决策:
- 第i个人打饭+吃饭的时间被前i-1个人的总时间覆盖。
- 第i个人打饭+吃饭的时间不被前i-1个人的总时间覆盖。
在窗口1打饭
d p [ i ] [ j ] [ k ] = m i n ( d p [ i ] [ j ] [ k ] , m a x ( d p [ i − 1 ] [ j − a ] [ k ] , j + b ) ) dp[i][j][k] = min(dp[i][j][k], max(dp[i-1][j-a][k], j+b) ) dp[i][j][k]=min(dp[i][j][k],max(dp[i−1][j−a][k],j+b))
在窗口2打饭
d p [ i ] [ j ] [ k ] = m i n ( d p [ i ] [ j ] [ k ] ,