這題就是要用遞迴來寫。
就是分成四個區域,然後把第一塊全部賦值為0,然後繼續遞迴。
結束條件就是正方形的邊為2。
#include
using
namespace std;
int vis[
1050][
1050];
int n;
void
dfs(
int p,
int x,
int y)
for(
int i=x;i<=x+p/2-
1;i++)}
dfs(p/
2,p/
2+x,y)
;dfs
(p/2
,p/2
+x,p/
2+y)
;dfs
(p/2
,x,p/
2+y);}
intmain()
}dfs
(p,1,1
);//遞迴
for(
int i=
1;i<=p;i++
) cout<
[p]<
}}
尋找不被赦免的戰俘,將其賦值為1。
由題可以知道:三個方向要賦值為1.
則要寫3層遞迴。
#include
using
namespace std;
int a[
1050][
1050
],n;
void
cal(
int x,
int y,
int n)
}int
main()
cout<
}return0;
}
P5461 赦免戰俘
又是一道眼高手低的題目,考察的是最基礎的遞迴,然而我又錯了 畫個圖方便理解 很容易想到用遞迴,用遞迴的話,先考慮遞迴的邊界,就是遞迴何時結束 對於乙個正方形陣列,首先將其分為四份,左上角那一塊全部赦免,再依次遞迴其餘三部分,當這個正方形陣列的邊長為2時,就可以結束遞迴了。1 include 2 us...
LGOJ P5461 赦免戰俘
乙個 2n 2n 2 n times2 n 2n 2 n 的矩陣,每個位置站著乙個作弊者,每次將正方形矩陣分割成4個更小的正方形矩陣,每個矩陣的邊長是原矩陣的一半。其中左上角那乙個矩陣的所有作弊者都將得到赦免,剩下的三個矩陣中,每乙個矩陣繼續分為 4 個更小的矩陣,然後以同樣的方式分割矩陣,以同樣的...
P2016 戰略遊戲
樹形dp f u 0 表示 uf u 0 表示u f u 0 表示u 號節點不放士兵,以x為根的子樹需要的最少士兵數。f u 1 表示 uf u 1 表示u f u 1 表示u 號節點放士兵,以x為根的子樹需要的最少士兵數。由於我們定義的是將其完全覆蓋,則我們不需要考慮父親節點,為什麼?當我們已經回...