zoukankan      html  css  js  c++  java
  • UVALive 4987 EvacuationPlan(dp,贪心)

    在所有避难所都有至少一只队伍的情况,总移动距离最小。

    把队伍的位置和人都排序。

    会发现,对于最后一个队伍i和最后一个避难所j,

    Case 1:pos[j]>=pos[i],那么i是距离j最近的一只队伍,

    Case 2:pos[j]<pos[i],那么j是距离i最近的一个避难所。

    dp[i][j]表示第i个人,第j个避难所非空的最小总距离。

    转移:对于第i个人,只需要往j走就好了。

    Case 1,如果i走到最近的避难所j',那么必须要有i之前的某个i'走到j,不会更优。

    Case 2,直接贪心。

    j已经有队伍了,前i-1个人可以进j也可以不进。

    dp[i][j] = min(dp[i-1][j],dp[i-1][j-1])+dist(i,j).

    可以从大到小枚举j把空间优化成一维。

    路径用过bitset和bool。结果bitset慢了200ms...

    想了很久的贪心的只能水过样例。还是n^2的dp稳啊。

    VeiwCode

  • 相关阅读:
    动手动脑5
    每日日报
    每日日报
    每日日报
    每日日报
    每日日报
    每日日报
    每周总结
    2020/10/13
    2020/10/20
  • 原文地址:https://www.cnblogs.com/jerryRey/p/4870074.html
Copyright © 2011-2022 走看看