(中石油五)問題 E 方格取數(暴搜)

2021-10-01 07:22:37 字數 1353 閱讀 3955

題目描述

在 n 行、m 列的方格矩陣中,每個方格都包含乙個數字。小明可以從任意方格出發開始移動。每次移動可以移到與當前方格有一條邊相鄰的方格(即向上、下、左或右方向移動 1 格,且不能移出邊界)。除此之外,你移動到的方格中的數字必須比當前方格中的數字更大。

請你幫助小明程式設計規劃移動路徑,使路徑上經過的所有數字之和最大。

本題方格中的資料根據輸入的初始數字 s 按照如下演算法生成:

for i = 1, 2, … n

for j = 1, 2, … m

s ← (s × 345) mod 19997

矩陣第 i 行第 j 列方格中的數字為(s mod 10) + 1

輸入正整數 n, m (方格的大小), s (資料生成器的初始數值)。1 ≤ n,m ≤ 100,1 ≤ s ≤ 19,997。

輸出所有合法路徑中的最大數字和。

樣例輸入 copy

4 5 97

樣例輸出 copy

24提示

樣例資料1對應的矩陣如下。圖中路徑數字之和4 + 5 + 7 + 8 = 24。

學長和我說這題記憶化搜尋比較好,還不太會實現,先把最樸素的暴力呈上啦。(ps:這題資料不大,暴搜沒超時)

#include

using

namespace std;

typedef

long

long ll;

int a[

102]

[102

],n,m,s,maxn;

void

dfs(

int t,

int k ,

int temp)

if(a[t]

[k][k])

dfs(t+

1,k,temp+a[t+1]

[k]);if

(a[t]

[k][k])

dfs(t-

1,k,temp+a[t-1]

[k]);if

(a[t]

[k][k+1])

dfs(t,k+

1,temp+a[t]

[k+1])

;if(a[t]

[k][k-1])

dfs(t,k-

1,temp+a[t]

[k-1])

;}intmain()

}for

(int i=

1; i<=n; i++

) cout<

return0;

}

(中石油六)問題E 積木(dp法)

問題 積木 問題 e 積木 時間限制 1 sec 記憶體限制 128 mb 題目描述 喬治喜歡玩積木。目前他有n塊積木,編號為1到n。所有積木的高度都是正整數,第i塊積木高度是h i 喬治喜歡用積木堆起盡可能高的塔。他堆積木的過程中,只需要同時滿足如下三個規則 1 積木必須堆放在同乙個列中,乙個搭在...

方格取數問題

點我網路流 考慮先將棋盤黑白染色變成二分圖,這樣使得每個格仔有公共邊的其他格仔和它自己都是異色的,然後把它向其他四個方向的點連一下邊,邊容量 inf s 連黑點,容量為權值,白點連 t 容量同理 於是問題轉化為乙個最小割問題 include define inf 1000000000 7 defin...

題解 方格取數問題

傳送門 在乙個有 m n 個方格的棋盤中,每個方格中有乙個正整數。現要從方格中取數,使任意 2 個數所在方格沒有公共邊,且取出的數的總和最大。試設計乙個滿足要求的取數演算法。對於給定的方格棋盤,按照取數要求程式設計找出總和最大的數。這個題目也是很明顯的網路流,奇偶性建圖,最後總和 最小割即為答案 i...