乙個 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 個積分。當你將所有盒子都去掉之後,求你能獲得的最大積分和。示例 輸...