lightoj 1018 (狀態壓縮DP)

2021-06-23 02:42:03 字數 435 閱讀 8006

設dp[s]表示狀態s下所需要的線段的個數,s的二進位制中第x位為1就表示該狀態下第x個點沒被線段覆蓋。需要預處理出來在任意兩點之間連線所覆蓋點的狀態o(n^3),然後記憶化搜尋即可。

#include#include#include#include#includeusing namespace std;

const int maxn = 16;

int n, dp[1 << maxn], s[maxn][maxn];

struct point

};point p[maxn];

void init()}}

}int dfs(int st)

}break;}}

return dp[st];

}int main()

return 0;

}

lightoj 1011 (狀態壓縮dp)

思路 狀態壓縮dp,設dp i j 表示前i行,狀態為j時的最大值,狀態定義為 若前i行中取了第x列那麼j的二進位制位中第x位為1,否則為0,最後答案就是dp n 1 1 n 1 裝態轉移方程就是 dp i j 1 k max dp i j 1 k dp i 1 j mat i k j 1 k 0 ...

lightoj 1158 狀態壓縮 數字DP

題意 給定乙個數,求有多少種變換是該數對d取余為0 思路 很明顯的數字dp,又因為這題每一位的數的個數是受限制的,所以在轉移的過程中要記錄數的使用情況,而給定的數最多為10位,所以可以用狀態壓縮 dp statu premod 表示已經使用statu中的位置的數,且之前的余為premod的個數 ac...

LightOJ1037 Agent 47 狀態壓縮

題目大意 有乙個殺手,他一開始有一把槍,每次開槍只能造成一點傷害,他需要消滅n個敵人,每個敵人有各自的health i 並且有 消滅敵人就可以獲得他的 用來消滅其他敵人 題目解析 n特別小,並且序列不需要有順序,很明顯是狀態dp,dp i 表示消滅序列i時所需要最少的開槍次數,然後dp的時候列舉沒有...