P5461 赦免戰俘

2022-09-16 14:27:10 字數 1073 閱讀 8886

又是一道眼高手低的題目,考察的是最基礎的遞迴,然而我又錯了

畫個圖方便理解

很容易想到用遞迴,用遞迴的話,先考慮遞迴的邊界,就是遞迴何時結束

對於乙個正方形陣列,首先將其分為四份,左上角那一塊全部赦免,再依次遞迴其餘三部分,當這個正方形陣列的邊長為2時,

就可以結束遞迴了。

1 #include 2

using

namespace

std;

3const

int n = 2048;4

inta[n][n];

5int n; //

次方數6

int p = 1; //

p = 2 ^ n

7void di(int x,int l,int

q) 14

for (int i = l; i <= l + x / 2 - 1; i++) 18}

19 di(x / 2, l + x / 2, q); //

遞迴處理剩餘的三個正方形,注意引數

20 di(x / 2, l + x / 2, q + x / 2); //

遞迴處理剩餘的三個正方形,注意引數

21 di(x / 2, l, q + x / 2); //

遞迴處理剩餘的三個正方形,注意引數22}

23int

main()

28for (int i = 1; i <= p; i++) 32}

33 di(p, 1, 1); //

開始遞迴

34for (int i = 1; i <= p; i++)

38 cout <

40return0;

41 }

P5461 赦免戰俘(遞迴)

這題就是要用遞迴來寫。就是分成四個區域,然後把第一塊全部賦值為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...

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為根的子樹需要的最少士兵數。由於我們定義的是將其完全覆蓋,則我們不需要考慮父親節點,為什麼?當我們已經回...