洛谷 P1123 取數遊戲

2022-07-17 07:39:08 字數 2000 閱讀 5080

乙個n×m的由非負整數構成的數字矩陣,你需要在其中取出若干個數字,使得取出的任意兩個數字不相鄰(若乙個數字在另外乙個數字相鄰8個格仔中的乙個即認為這兩個數字相鄰),求取出數字和最大是多少。

輸入格式:

輸入第1行有乙個正整數t,表示了有t組資料。

對於每一組資料,第1行有兩個正整數n和m,表示了數字矩陣為n行m列。

接下來n行,每行m個非負整數,描述了這個數字矩陣。

輸出格式:

輸出包含t行,每行乙個非負整數,輸出所求得的答案。

輸入樣例#1:

3

4 467 75 63 10

29 29 92 14

21 68 71 56

8 67 91 25

2 387 70 85

10 3 17

3 31 1 1

1 99 1

1 1 1

輸出樣例#1:

271

17299

對於第1組資料,取數方式如下:

[67] 75 63 10

29 29 [92] 14

[21] 68 71 56

8 67 [91] 25

對於20%的資料,n, m≤3;

對於40%的資料,n, m≤4;

對於60%的資料,n, m≤5;

對於100%的資料,n, m≤6,t≤20。

————————————————我是分割線————————————————————

1/*2

problem:

3oj:

4user: s.b.s.

5time:

6memory:

7length:8*/

9 #include10 #include11 #include12 #include13 #include14 #include15 #include16 #include17 #include18 #include19 #include20 #include21 #include22 #include23

#define f(i,j,k) for(int i=j;i<=k;++i)

24#define m(a,b) memset(a,b,sizeof(a))

25#define ff(i,j,k) for(int i=j;i>=k;i--)

26#define maxn 10001

27#define inf 0x3f3f3f3f

28#define maxm 4001

29#define mod 998244353

30//

#define local

31using

namespace

std;

32int

read()

35while(ch>='

0'&&ch<='9')

36return x*f;37}

38int

n,m;

39int

ans;

40int a[15][15

];41

int dx[9]=,dy[9]=;//

方向增量

42int can[15][15];//

表示是否可選

43void dfs(int i,int j,int now)

48if(i>n)

52int

k;53

if(can[i][j]==0)

58 dfs(i,j+1,now);//

不選59}60

intmain()

69 memset(can,0,sizeof

(can));

70 dfs(1,1,0

);71 printf("

%d\n

",ans);72}

73return0;

74 }

view code

洛谷 p1123取數遊戲

定義乙個dfs函式,函式有三個變數,分別是i,j,sum。i,j分別代表訪問的這個點的座標,sum表示這條路徑上的數字的和。思路是 從 1,1 這個點進入,依次以先列數增加,然後行數增加在訪問所有的點。如下 include include include using namespace std in...

洛谷 P1123 取數遊戲

洛谷傳送門 乙個n times mn m的由非負整數構成的數字矩陣,你需要在其中取出若干個數字,使得取出的任意兩個數字不相鄰 若乙個數字在另外乙個數字相鄰88個格仔中的乙個即認為這兩個數字相鄰 求取出數字和最大是多少。第1行有乙個正整數tt,表示了有tt組資料。對於每一組資料,第一行有兩個正整數nn...

P1123 取數遊戲(洛谷)

乙個n m的由非負整數構成的數字矩陣,你需要在其中取出若干個數字,使得取出的任意兩個數字不相鄰 若乙個數字在另外乙個數字相鄰8個格仔中的乙個即認為這兩個數字相鄰 求取出數字和最大是多少。第1行有乙個正整數t,表示了有t組資料。對於每一組資料,第一行有兩個正整數n和m,表示了數字矩陣為n行m列。接下來...