HDU 1565 状态压缩
生活随笔
收集整理的這篇文章主要介紹了
HDU 1565 状态压缩
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題意:
你一個n*n的格子的棋盤,每個格子里面有一個非負數。
從中取出若干個數,使得任意的兩個數所在的格子沒有公共邊,就是說所取的數所在的2個格子不能相鄰,并且取出的數的和最大。(n <= 20)
算法:
因為n比較少20,可以用狀態壓縮,1表示方格該數取,0表示不取。
每一行的狀態有1<<N種,先預處理所有合法狀態,即相鄰兩位不能為1,
判斷條件是i && (i<<1),下一行的狀態要滿足條件的是跟上一行沒有相
鄰的 num[i] & num[j] == 0
int num[21000]; //狀態
int sum[21][21000]; //該狀態的和
int len;
int mt[30][30]; //存儲方格
轉載于:https://www.cnblogs.com/tangcong/archive/2012/08/05/2623606.html
總結
以上是生活随笔為你收集整理的HDU 1565 状态压缩的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: POJ 3259 SPFA
- 下一篇: 判断手机是否输入表情