hdu 5691 Sitting in Line(状压dp)

Posted jpphy0

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hdu 5691 Sitting in Line(状压dp)相关的知识,希望对你有一定的参考价值。

问题

hdu 5691 Sitting in Line - https://acm.hdu.edu.cn/showproblem.php?pid=5691

分析

实质

  • 求解最优排列

贪心策略

  • 例如:3,-1,-5,4(不预设任何位置)
  • 若前面两个数是4、-5,则有两种排列
    • 4,-5,结果是:-20
    • -5,4,结果是:-20
    • 这两个排列哪个更优呢?答案:无法比较。理由如下:
  • 若扩展一个3,则有
    • 4,-5,3,结果是:-35
    • -5,4,3,结果是:-8
    • 显然,后者对应了较优解
  • 若扩展一个-1,则有
    • 4,-5,-1,结果是:-15
    • -5,4,-1,结果是:-24
    • 显然,前者对应了较优解
  • 结论:当集合 { a 1 , a 2 , ⋯ , a k } \\{a_1,a_2,\\cdots,a_k\\} {a1a2ak} 中的元素构成一个排列时,只有尾元素相同时才能比较优劣,即可贪心,因此有k个结果
    • { a 1 , a 2 , ⋯ , a k } \\{a_1,a_2,\\cdots,a_k\\} {a1a2ak} a 1 a_1 a1 结尾
    • { a 1 , a 2 , ⋯ , a k } \\{a_1,a_2,\\cdots,a_k\\} {a1a2ak} a 2 a_2 a2 结尾
    • ……
    • { a 1 , a 2 , ⋯ , a k } \\{a_1,a_2,\\cdots,a_k\\} {a1a2ak} a k a_k ak 结尾

状态定义

  • 上述k个结果就是k个状态
  • 如何表示状态?需要 个量
    • 已经被排列的数的集合
    • 排列中的最后一个元素
  • 如何表示集合?
    • 集合 ⇒ 映 射 \\quad\\overset{映射}{\\Rightarrow}\\quad 二进制
    • 设集合 { a 2 , a 3 , a 5 , a 7 , a 12 , a 16 } \\{a_2,a_3,a_5,a_7,a_{12},a_{16}\\} {a2a3a5a7a12a16}
    • 16位二进制: 1000    1000    0101    0110 1000\\;1000\\;0101\\;0110 1000100001010110,将元素的下标对应的二进制 置1
  • d p [ s ] [ i ] dp[s][i] dp[s][i] s s s 为元素下标的映射, i i i 为尾元素的下标
  • 状态转移
    • d p [ s ∣ ( 1 < < ( j − 1 ) ) ] [ j ] = m a x ( d p [ s ∣ ( 1 < < ( j − 1 ) ) ] [ j ] , d p [ s ] [ i ] + a i × a j ) dp[s | (1<< (j-1))][j]=max(dp[s | (1<< (j-1))][j],dp[s][i]+a_i \\times a_j) dp[s(1<<(j1))][j]=max(dp[s(1<<(j1))][j]dp[s][i]+ai×aj)

真实态、虚假态

  • 设共有4个元素 a 1 , a 2 , a 3 , a 4 a_1,a_2,a_3,a_4 a1a2a3a4,其中 a 2 a_2 a2 预设在 0 位置
  • 那么,将 a 2 a_2 a2 排在 0 位置的状态 [ 0010 ] [ 2 ] [0010][2] [0010][2] 是合理的、真实的
a2
0010,2
  • 相反,将 a 1 a_1 a1 排在 0 位置的状态 [ 0001 ] [ 1 ] [0001][1] [0001][1] 是不合理、虚假的;同理,将 a 3 、 a 4 a_3、a_4 a3a4 排在 0 位置都是虚假态

以上是关于hdu 5691 Sitting in Line(状压dp)的主要内容,如果未能解决你的问题,请参考以下文章

HDU 5691 Sitting in Line

hdu 5691 Sitting in Line(状压dp)

hdu 5691 Sitting in Line (状压dp)

HDU5691 Sitting in Line状压DP

hdu 5691 Sitting in Line 状压dp

HDU 5691 Sitting in Line 状压dp