題目描述
在 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...