zoukankan      html  css  js  c++  java
  • HDU 4283 (DP)

      题意很纠结。。。说的是1...n这些人登台,每个人有个吊丝值D[i],如果i号人第k个登台,那么他的愤怒值就是(k-1)*D[i]。现在有一个栈,可以先把i前边的人依次次进栈,然后让第i号人登台,然后在选择是栈里的同学登台还是i以后的同学登台,这样很多种情况会得到很多总愤怒值。求最小的总愤怒值。。。。

      n<=100,暴力肯定不行。3^100....只能考虑dp,(贪心直接忽略-_-!)。想了半天一直在考虑怎么保存被访问的状态。。。所以从昨天晚上到今天一直没什么进展,无奈看了看解题报告。。设计思路确实很巧妙。。。

      dp[i][j]表示区间[i, j]的最优值,设[i, j]上i是第k个访问,那么从i往后的 [i + 1, i + k - 1]这k-1个数肯定是要先于i被访问,i后面的数[i + k, j]当然要在i后被访问,因为[i + k, j]前面有k个登台,所以后面的愤怒值要增加 sigma(i + k, j)*k.

    转移方程就出来了。。

    dp[i][j] = min{dp[i][j], (k-1)*D[i] + dp[i+1][i + k - 1] + dp[i+k][j] + k*sigma(i + k, j)};

    记忆化搜索可破。。。

  • 相关阅读:
    Openlayers2中vector扩展FeatureLayer
    点图层叠加与事件响应
    geoserver服务wfs之GetFeature
    Echart在Openlayers的应用-航班的炫光特效
    Echart在Openlayers的应用-热力图
    Echart在Openlayers的应用
    WMS图例展示
    Java新手锻炼
    Java动手又动脑
    java递归问题小程序
  • 原文地址:https://www.cnblogs.com/vongang/p/2682376.html
Copyright © 2011-2022 走看看