洛谷 P3262 戰爭排程

2021-10-05 22:43:42 字數 854 閱讀 5980

作為乙個刷題的萌新來說,這題簡直太難了。

從網上看了大佬的部落格,看了好久(參考部落格連線在文末)。

這道題結合了深搜和dp。

從題目裡我還學到了用位移位運算的方便快捷。>> <<

從大佬的部落格中,我學習到:對於葉子結點來說,當祖先結點的狀態確定時,根據貢獻值,他參戰與否就能確定。那麼我們從根結點到葉節點深搜,每向葉節點靠近一層,就確定當前這個結點的狀態。當達到葉結點時,根據祖先結點的狀態,就能確定他參戰或是後勤的總貢獻。在回溯時,每回溯一層,求得當前結點為根時,不同葉子參戰數的貢獻值。

#include #include int war[1024][10];

int farm[1024][10];

int node=0;//子結點的數量

int state;//上層節點的狀態

int dp[1024][513];

int n,m;

void dfs(int x);

int max(int a,int b);

int main()

void dfs(int x)else

}return;

}node>>=1;

state<<=1;//當前不參戰

dfs(x<<1);

dfs(x<<1|1);

for(j=0;j<=node;j++)

}state|=1;//當前參戰

dfs(x<<1);

dfs(x<<1|1);

for(j=0;j<=node;j++)

}state>>=1;

node<<=1;

}int max(int a,int b)

參考部落格:

JLOI2015 戰爭排程

記憶體限制 256 mib 時間限制 1000 ms 標準輸入輸出 題目型別 傳統 評測方式 文字比較 臉哥最近來到了乙個神奇的王國,王國裡的公民每個公民有兩個下屬或者沒有下屬,這種關係剛好組成乙個 n 層的完全二叉樹。公民 i 的下屬是 2i 和 2i 1 最下層的公民即葉子節點的公民是平民,平民...

JLOI2015 戰爭排程 war

一開始看這題,毫無頭緒 不過發現n十分的小,最多只有10,想一想暴搜加優化。先試著打了打暴搜,從上往下列舉狀態,然後搜尋到子節點的時候,再統計答案,每個父節點的答案是兩個子節點答案的和,dfs x,y,z 表示當前搜到的點二進位制狀態為x,從根節點到底層打仗的狀態為y,然後此時要打仗的人有z個。然後...

題解 JLOI2015戰爭排程

搜尋 狀壓 dp。注意到乙個性質 考慮一棵以x為根的子樹,在x到原樹的根的路徑上的點如果都已經確定了方案,那麼x的左右兒子的決策就彼此獨立,互不影響了。所以我們考慮狀壓一條路徑上每一層節點的狀態,求出dp u x 以u為根的子樹中分配x個作戰平民的最大收益是多少 注意因為是在dfs當中,所以dp陣列...