題記 入門 狀壓DP

2021-10-24 13:44:22 字數 1382 閱讀 7413

題目描述:

在電影《金陵十三釵》中有十二個秦淮河的女人要自我犧牲代替十二個女學生去赴日本人的死亡宴會。為了不讓日本人發現,自然需要一番喬裝打扮。但由於天生材質的原因,每個人和每個人之間的相似度是不同的。由於我們這是程式設計題,因此情況就變成了金陵n釵。給出n個女人和n個學生的相似度矩陣,求她們之間的匹配所能獲得的最大相似度。

所謂相似度矩陣是乙個n*n的二維陣列like[i][j]。其中i,j分別為女人的編號和學生的編號,皆從0到n-1編號。like[i][j]是乙個0到100的整數值,表示第i個女人和第j個學生的相似度,值越大相似度越大,比如0表示完全不相似,100表示百分之百一樣。每個女人都需要找乙個自己代替的女學生。

最終要使兩邊一一配對,形成乙個匹配。請程式設計找到一種匹配方案,使各對女人和女學生之間的相似度之和最大。

輸入格式:

第一行乙個正整數n表示有n個秦淮河女人和n個女學生 接下來n行給出相似度,每行n個0到100的整數,依次對應二維矩陣的n行n列。

輸出格式:

僅一行,乙個整數,表示可獲得的最大相似度。

輸入樣例:

在這裡給出一組輸入。例如:

4

97 91 68 14

8 33 27 92

36 32 98 53

73 7 17 82

輸出樣例:

在這裡給出相應的輸出。例如:

354
顯然,這個題dfs肯定是超時的,想到可以用狀態壓縮dp來解決。

題解**如下:(原題很水,沒有資料範圍)

#include

#include

#include

#include

#include

#include

using

namespace std;

int n;

int woman[

105]

[105];

int dp[

1<<13]

[100];

intrec

(int s,

int idx)

return dp[s]

[idx]

= res;

}int

main()

}memset

(dp,-1

,sizeof dp)

; cout <<

rec(0,

0)<< endl;

return0;

}

狀壓DP入門

洛谷題號p1896 在n n的棋盤裡面放k個國王,使他們互不攻擊,共有多少種擺放方案。國王能攻擊到它上下左右,以及左上左下右上右下八個方向上附近的各乙個格仔,共8個格仔。題解 首先暴搜可肯定是超時的所以我門考慮狀壓 因為每個數都可以用二進位制表示出來 二進位制中01可以表示當前行放的棋子的位置 以及...

狀壓DP入門

首發於摸魚世界 狀壓dp,即狀態壓縮dp,它的精髓在於把dp過程中的乙個 狀態 用乙個二進位制數巧妙的表示出來。接下來就從一些入門的狀壓題目來感受一下狀壓的魅力吧 洛谷p5911 poi2004 prz 大致題意 n 個人過最大承載 w 重量的橋,每個人有重量 w i 與過橋時間 t i 多人一組時...

狀壓DP入門題

學習狀壓之前必須要熟練掌握位運算 位運算名 符號效果 and 按位與如果兩個相應的二進位制位都為1,則該位的結果值為1,否則為0 l or 按位或兩個相應的二進位制位中只要有乙個為1,該位的結果值為1 xor 按位異或 單身狗操作 若參加運算的兩個二進位制位值相同則為0,否則為1 取反 一元運算子,...