Luogu P2049 魔術棋子

2021-09-26 21:48:17 字數 1479 閱讀 9348

解析**

在乙個m×n

m\times n

m×n的魔術棋盤中,每個格仔中均有乙個整數,當棋子走進這個格仔中,則此棋子上的數會被乘以此格仔中的數。乙個棋子從左上角走到右下角,只能向右或向下行動,請問此棋子走到右下角後,模(mo

d)

k(mod)k

(mod)k

可以為幾?

如以下2×3

2\times3

2×3棋盤:

3    4    4

5 6 6

棋子初始數為1

11,開始從左上角進入棋盤,走到右下角,上圖中,最後棋子上的數可能為288

,432

288,432

288,43

2或540

54054

0。所以當k=5

k = 5

k=5時,可求得最後的結果為:0,2

,3

0,2,3

0,2,3。

第一行為三個數,分別為m,n

,k(1

≤m,n

,k

≤100

)m,n,k (1 \le m,n,k \le 100)

m,n,k(

1≤m,

n,k≤

100)

以下m行,每行n個數,分別為此方陣中的數。

第一行為可能的結果個數

第二行為所有可能的結果(按公升序輸出)

2 3 5

3 4 4

5 6 6

3

0 2 3

一道很顯然的dfs題。記得記憶化!

#include

using

namespace std;

int m, n, k;

int map[

1001][

1001];

bool buc[

101]

;bool book[

1001][

1001][

1001];

boolin(

int x,

int y)

void

dfs(

int x,

int y,

int t)

dfs(x +

1, y, t)

;dfs

(x, y +

1, t);}

intmain()

}dfs(1

,1,1

);int ans =0;

for(

int i =

0;i < k;i++

) cout << ans << endl;

for(

int i =

0;i < k;i++

)return0;

}

P2049 魔術棋子

在乙個m n的魔術棋盤中,每個格仔中均有乙個整數,當棋子走進這個格仔中,則此棋子上的數會被乘以此格仔中的數。乙個棋子從左上角走到右下角,只能向右或向下行動,請問此棋子走到右下角後,模 mod k可以為幾?如以下2 3棋盤 3 4 4 5 6 6 棋子初始數為1,開始從左上角進入棋盤,走到右下角,上圖...

P2049 魔術棋子 題解

csdn同步 原題鏈結 簡要題意 在乙個 n times m 的魔術棋盤中,每個格仔中均有乙個整數,當棋子走進這個格仔中,則此棋子上的數會被乘以此格仔中的數。乙個棋子從左上角走到右下角,只能向右或向下行動,請問此棋子走到右下角後,模 k 可以為幾?原題題意足夠簡要了吧 n,m,k leq 100 考...

洛谷 P2049 魔術棋子

乙個比較簡單dp問題。我們先來分析一下題目,要找到所有的模的總數,首先可以想到,用dp i j 表示在 i,j 這個點所有的方案數。但是,這樣顯然不行。因為僅僅知道方案總數對求解下乙個狀態毫無幫助。那麼,我們就要記錄每乙個點所有可能的模。所以,我們用三維dp i j l 表示在 i,j 點是否能夠得...