PAT乙級 Basic Level 練習題 採花生

2021-10-03 13:35:44 字數 3174 閱讀 2234

題目描述

魯賓遜先生有乙隻寵物猴,名叫多多。這天,他們兩個正沿著鄉間小路散步,突然發現路邊的告示牌上貼著一張小小的紙條:「歡迎免費品嚐我種的花生!——熊字」。

魯賓遜先生和多多都很開心,因為花生正是他們的最愛。在告示牌背後,路邊真的有一塊花生田,花生植株整齊地排列成矩形網格。有經驗的多多一眼就能看出,每棵花生植株下的花生有多少。為了訓練多多的算術,魯賓遜先生說:「你先找出花生最多的植株,去採摘它的花生;然後再找出剩下的植株裡花生最多的,去採摘它的花生;依此類推,不過你一定要在我限定的時間內回到路邊。」

我們假定多多在每個單位時間內,可以做下列四件事情中的一件:

從路邊跳到最靠近路邊(即第一行)的某棵花生植株;從一棵植株跳到前後左右與之相鄰的另一棵植株;採摘一棵植株下的花生;從最靠近路邊(即第一行)的某棵花生植株跳回路邊。

現在給定一塊花生田的大小和花生的分布,請問在限定時間內,多多最多可以採到多少個花生?

注意可能只有部分植株下面長有花生,假設這些植株下的花生個數各不相同。例如花生田裡只有位於(2, 5), (3, 7), (4, 2), (5, 4)的植株下長有花生,個數分別為 13, 7, 15, 9。多多在 21 個單位時間內,只能經過(4, 2)、(2, 5)、(5, 4),最多可以採到 37 個花生。

輸入描述:

輸入包含多組資料,每組資料第一行包括三個整數m(1≤m≤20)n(1≤n≤20)k(0≤k≤1000),用空格隔開;表示花生田的大小為m * n,多多採花生的限定時間為 k個單位時間。

緊接著 m 行,每行包括 n 個自然數p(0≤p≤500),用空格隔開;表示花生田裡植株下花生的數目,並且除了0(沒有花生),其他所有植株下花生的數目都不相同。

輸出描述:

對應每一組資料,輸出乙個整數,即在限定時間內,多多最多可以採到花生的個數。

輸入例子:

6721

0000

0000

00013

0000

0000

70150

0000

0009

0000

0000

00

輸出例子:

37
解題思

路:\color解題思路:

解題思路

:這道題並不複雜,但是題目要求容易被忽略,導致有個別測試用例無法通過。

先注意以下幾點:

1、花生採摘順序是從多到少的植株,因此需要對所有花生植株進行排序!

假設花生植株a>b>c>d>e,你的採摘順序必須是a、b、c、d、e,不能打亂!!!

別tm和我一樣自作聰明,採取類貪心策略,選取最優路徑採摘最多的花生。。。

2、轉去採摘某顆花生時,必須要考慮剩下的時間能不能採摘到花生並且回到路邊。

轉去目標需要的時間 + 採摘花生需要的時間 + 回到路邊的時間

3、初始狀態在路邊,去第一行任意一列的時間都是1個單位時間!!!

題目中明確說了!!!別問為什麼。。。

4、示意圖:

列數 ① ② ③ ④ ⑤ ⑥ ⑦

第0行 | 路--

----

----

-邊第1行 |00

0000

0第2行 |00

00130

0第3行 |00

0000

7第4行 |015

0000

0第5行 |00

0900

05、任意節點(row, col)回到路邊,需要row個單位時間!!!

程式碼實

現:\color**實現:

**實現

#include

#include

using

namespace std;

struct node

node

(int row,

int col,

int count)};

// 希爾排序:按照count化生數降序排列

void

sort

(node* nodes,

int size)

}//縮小步長

d /=2

;}}int

main

(int argc,

const

char

* ar**)

;//scanf返回值為正確輸入資料的變數個數,當乙個變數都沒有成功獲取資料時,此時返回-1

while

(scanf

("%d %d %d"

,&m,

&n,&k)!=-

1)}//第二步:按照花生數降序排列

sort

(nodes, m * n)

;//第三步:按照花生植株所含花生數從大->小的順序採摘

//nowrow、nowcol記錄當前所處位置,初始為(0, nodes[0].col),是因為根據模型知,路邊處於第0行,並且路邊到第一行只需要1個單位時間,所以可以到任意列

int rescount =

0, nowrow =

0, nowcol = nodes[0]

.col, nextk;

for(

int i =

0; i < m * n;

++i)

//轉移到nodes[i]

PAT乙級 Basic Level 真題

時間限制 1000 ms 記憶體限制 32768 kb 長度限制 100 kb 判斷程式 standard 來自 小小 題目描述 給定區間 2的31次方,2的31次方 內的3個整數a b和c,請判斷a b是否大於c。輸入描述 輸入第1行給出正整數t 10 是測試用例的個數。隨後給出t組測試用例,每組...

PAT乙級 Basic Level 真題1003

題目描述 令pi表示第i個素數。現任給兩個正整數m n 10000,請輸出pm到pn的所有素數。輸入描述 輸入在一行中給出m和n,其間以空格分隔。輸出描述 輸出從pm到pn的所有素數,每10個數字佔1行,其間以空格分隔,但行末不得有多餘空格。輸入例子 5 27 輸出例子 11 13 17 19 23...

PAT乙級 Basic Level 練習題 有假幣

題目描述 居然有假幣!現在豬肉漲了,但是農民的工資卻不見漲啊,沒錢怎麼買豬肉啊。nowcoder這就去買豬肉,結果找來的零錢中有假幣!可惜nowcoder一不小心把它混進了一堆真幣裡面去了。只知道假幣的重量比真幣的質量要輕,給你乙個天平 天平兩端能容納無限個硬幣 請用最快的時間把那個可惡的假幣找出來...