题解

2 条题解

  • 0
    @ 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 }

  • 0
    @ 2025-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

信息

ID
2248
难度
9
分类
动态规划 点击显示
标签
递交数
3
已通过
1
通过率
33%
被复制
2
上传者