LGOJ P5461 赦免戰俘

2021-10-01 15:14:51 字數 1191 閱讀 3503

乙個 2n×

2n

2^n \times2^n

2n×2

n 的矩陣,每個位置站著乙個作弊者,每次將正方形矩陣分割成4個更小的正方形矩陣,每個矩陣的邊長是原矩陣的一半。其中左上角那乙個矩陣的所有作弊者都將得到赦免,剩下的三個矩陣中,每乙個矩陣繼續分為 4 個更小的矩陣,然後以同樣的方式分割矩陣,以同樣的方式赦免,直到矩陣不能再分割為止,剩下的作弊者將會被懲罰。求這個矩陣每個作弊者的命運,赦免為 0 ,懲罰為1

n ≤10

n\leq 10

n≤10

這是洛谷2019七月月賽的題目。

這題很快就碼出來了,結果我的本地c++跑了四秒多(n=10

n=10

n=10

),以為要打表了,結果交上去就直接ac了。想了一下應該是電腦老舊(windows 7的筆記本,裝了一大堆的頹廢軟體)的問題。

考慮使用dfs(深度優先搜尋)分治來做。

這道題就是求乙個按題目描述處理後的矩陣,為了減小碼量,我們直接設每個作弊者都要被懲罰,然後每次分割時只需要把4個被分割的正方形矩陣的左上角那個全部設為0即可。

dfs時注意這個矩陣是否不能分割了,那剩下的那名作弊者就就要受到懲罰。

具體細節見**

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

int ma[1025][1025],n;

void dfs(int x1,int y1,int x2,int y2)

}dfs(x3+1,y1,x2,y3);

dfs(x1,y3+1,x3,y2);

dfs(x3+1,y3+1,x2,y2);

}int main()

}dfs(1,1,n,n);

for(int i=1;i<=n;i++)

printf("\n");

}return 0;

}

Leetcode 546 移除盒子

給出一些不同顏色的盒子,盒子的顏色由數字表示,即不同的數字表示不同的顏色。你將經過若干輪操作去去掉盒子,直到所有的盒子都去掉為止。每一輪你可以移除具有相同顏色的連續 k 個盒子 k 1 這樣一輪之後你將得到 k k 個積分。當你將所有盒子都去掉之後,求你能獲得的最大積分和。示例 1 輸入 1,3,2...

546 移除盒子 動態規劃

題目描述 給出一些不同顏色的盒子,盒子的顏色由數字表示,即不同的數字表示不同的顏色。你將經過若干輪操作去去掉盒子,直到所有的盒子都去掉為止。每一輪你可以移除具有相同顏色的連續 k 個盒子 k 1 這樣一輪之後你將得到 k k 個積分。當你將所有盒子都去掉之後,求你能獲得的最大積分和。示例 1 輸入 ...

leetcode 546 移除盒子

546.移除盒子 給出一些不同顏色的盒子,盒子的顏色由數字表示,即不同的數字表示不同的顏色。你將經過若干輪操作去去掉盒子,直到所有的盒子都去掉為止。每一輪你可以移除具有相同顏色的連續 k 個盒子 k 1 這樣一輪之後你將得到 k k 個積分。當你將所有盒子都去掉之後,求你能獲得的最大積分和。示例 輸...