2 条题解
-
0
何老师 (root) LV 0 MOD @ 2025-03-23 11:20:12
(x[1],t[1])...(x[n],t[n]) 表示第各办公室的位置和时间
dp[i][j][0] 表示还剩下办公室 i~j 没有盖,且人在i处时 的最短时间
dp[i][j][1] 表示还剩下办公室 i~j 没有盖,且人在j处时 的最短时间dp[i][j][0] = min( max(dp[i-1][j][0],t[i-1])+(x[i]-x[i-1]),
max(dp[i-1][j][1]+x[j]-x[i-1],t[i-1])+(x[i]-x[i-1]),
max(dp[i][j+1][0]+x[j+1]-x[i],t[j+1])+(x[j+1]-x[i]),
max(dp[i][j+1][1],t[j+1])+(x[j+1]-x[i]))dp[i][j][1] = min( max(dp[i-1][j][0],t[i-1])+(x[j]-x[i-1]),
max(dp[i-1][j][1]+x[j]-x[i-1],t[i-1])+(x[j]-x[i-1])
max(dp[i][j+1][0]+x[j+1]-x[i],t[j+1])+(x[j+1]-x[j]),
max(dp[i][j+1][1],t[j+1])+(x[j+1]-x[j]))dp[1][n][0]=x[1]
dp[1][n][1]=x[n]Ans=min{max(dp[i][i][0],t[i])+|x[i]-p| | 1<=i<=n }
-
02025-03-23 09:31:34@
区间动归
把所有办公室按坐标由小到大排序!
首先明白一个原理:如果第i个到第j个办公室都没盖章,那么先去i或者先去j盖,要比先去中间的某个k教室更优,因为如果先去中间某个教室,之后必然还要走到i和j,那么不如先去i或者j,之后去另一端的教室时必然会经过中间的办公室盖章。
由此我们可以设区间动归:
f[i][j][0] 还剩下办公室i~j的盖没有盖,现在盖i处的章的最短时间。
f[i][j][1] 办公室i~j盖完章,现在盖j处的章的最短时间。
显然:
f[1][N][0]=max(x[i],t[i])
f[1][N][1]=max(x[N],t[N])方程:
f[i][j][0]= min( max(f[i-1][j][0]+x[i]-x[i-1],t[i]), max(f[i][j+1][1]+x[j+1]-x[i],t[i]) )f[i][j][1]= min( max(f[i-1][j][0]+x[j]-x[i-1],t[j]), max(f[i][j+1][1]+x[j+1]-x[j],t[j]) )
答案:
Ans= min(f[i][i][0]+|x[i]-P| | 1<=i<=N }
- 1