from collections import deque
N, M, P = map(int, input().split())
dis = [0, 0] + list(map(int, input().split()))
for i in range(1, len(dis)):
dis[i] += dis[i-1]
A = []
for i in range(M):
h, t = map(int, input().split())
A.append(t - dis[h])
A.sort()
S = [val for val in A]
for i in range(1, M):
S[i] += S[i-1]
'''
dp(i, j) 表示前j只猫i个饲养员送的最小开销,等价于把A前j个数分成最多i组,最小的总开销
dp(i, j) = min {
(j-k)*A[j] - [S(j) - S(k)] + dp(i-1, k)
}
k = j-1, j-2, ......0, -1 (k = -1时候特殊处理,dp[i][k] = 0
两层循环,每一行迭代时候就是一轮一维的凸包优化DP
S[k] + dp(i-1, k) = A[j] * k + ( S(j) - j*A[j] + dp(i, j) )
看做关于k的直线,横轴是k, 纵轴是S[k] + dp(i-1, k)
'''
dp = [[0] * (M+1) for _ in range(P+1)]
for i in range(1, P+1):
if i == 1:
for j in range(M):
dp[i][j] = A[j] * (j + 1) - S[j]
els
AcWing 凸包优化DP相关问题 303. 运输小猫
最新推荐文章于 2024-05-08 22:01:18 发布