邦德 紀中 1236 狀壓dp

2021-07-14 18:37:08 字數 1368 閱讀 8568

題目大意

每個人都知道詹姆斯邦德,著名的007,但很少有人知道很多任務都不是他親自完成的,而是由他的堂弟們吉公尺邦德完成(他有很多堂弟),詹姆斯已經厭倦了把乙個個任務分配給乙個個吉公尺,他向你求助。每個月,詹姆斯都會收到一些任務,根據他以前執行任務的經驗,他計算出了每個吉公尺完成每個任務的成功率,要求每個任務必須分配給不同的人去完成,每個人只能完成乙個任務。

請你編寫程式找到乙個分配方案使得所有任務都成功完成的概率。分析

一開始就想了乙個最大權匹配,於是就開開心心的打了乙個km求最大權匹配。為了不上台講,我還故意打小了陣列大小(因為我也講不清最大權匹配)

ps:又是他*4——

olahiu j「教」我改小陣列的。

但是,只拿了85分。

所以,正解是狀壓dp。

自己看**,不想說。**

var

f:array[0..3000000] of real;

a:array[0..200,0..200] of real;

sum:array[0..200] of longint;

w:array[0..200] of longint;

i,j,k:longint;

n:longint;

function max(x,y:real):real;

begin

if x>y

then exit(x)

else exit(y);

end;

begin

readln(n);

for i:=1 to n do

begin

for j:=1 to n do

begin

read(a[i,j]);

a[i,j]:=a[i,j]/100;

end;

readln;

end;

sum[1]:=1;

f[0]:=1;

for i:=2 to n do

sum[i]:=sum[i-1]*2;

for i:=1 to sum[n]*2-1 do

begin

fillchar(w,sizeof(w),0);

for j:=1 to n do

if i and sum[j]<>0

then

begin

w[0]:=w[0]+1;

w[w[0]]:=j;

end;

for j:=1 to w[0] do

f[i]:=max(f[i],f[i-sum[w[j]]]*a[w[0],w[j]]);

end;

write(f[sum[n]*2-1]*100:0:6);

end.

密碼盤 紀中 3067 狀壓dp

如圖是某人設想中的n n的密碼盤,用以顯示自己強大的智商以及計算能力。圖中每列上面有乙個0或1的值,每行左邊也有乙個0或1的值。密碼盤中有最多n n個按鈕,每個按鈕有乙個數值。按鈕按下去之後,你會獲得按鈕上的分數,然後對應行和對應列的值會改變。你的任務是,使每列上面的值和每行左邊的值一一對應相等 從...

狀壓dp 玉公尺田 狀壓dp

相關 強相關 327.玉公尺田 狀壓dp 小國王 狀壓dp 是井字形,本題是十字形。思路 狀態計算 時間複雜度 n 2 n 2n o n 22n 12 2 24n 2 n 2 n o n2 12 2 n 2n 2 n o n22n 12 224 看著妥妥超時,但是裡面合法狀態很少 依舊可以過 在此,...

狀壓dp小記

鋪磚 題意 現有nm的一塊地板,需要用12的磚塊去鋪滿,中間不能留有空隙。問這樣方案有多少種 include using namespace std typedef long long ll const int maxn 1 11 int n,m,state ll dp 15 maxn s1表示本行...