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)};

    记忆化搜索可破。。。

  • 相关阅读:
    NEO从入门到开窗(4)
    NEO从入门到开窗(3)
    NEO从入门到开窗(2)
    NEO从入门到开窗(1)
    重读大型网站技术架构
    c#并行编程
    关于使用CPU缓存的一个小栗子
    Visual Studio中从应用程序中调试SQL脚本
    JavaScript启示录
    LabVIEW工控二进制数据存储
  • 原文地址:https://www.cnblogs.com/vongang/p/2682376.html
Copyright © 2011-2022 走看看