題解 花生採摘

2021-10-08 04:27:46 字數 1902 閱讀 3387

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

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

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

1.從路邊跳到最靠近路邊(即第一行)的某棵花生植株;

2.從一棵植株跳到前後左右與之相鄰的另一棵植株;

3.採摘一棵植株下的花生;

4.從最靠近路邊(即第一行)的某棵花生植株跳回路邊。

現在給定一塊花生田的大小和花生的分布,請問在限定時間內,多多最多可以採到多少個花生?注意可能只有部分植株下面長有花生,假設這些植株下的花生個數各不相同。

例如在圖2所示的花生田裡,只有位於(2,5),(3,7),(4,2),(5,4)的植株下長有花生,個數分別為13,7,15,9。沿著圖示的路線,多多在21個單位時間內,最多可以採到37個花生。

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

接下來的m行,每行包括n個非負整數,也用空格隔開,第i+1行的第j個整數pij(0<=pij<=500)表示花生田裡植株(i,j)下花生的數目,0表示該植株下沒有花生。

輸出包括一行,這一行只包含乙個整數,即在限定時間內,多多最多可以採到花生的個數。

樣例輸入

6  7  21

0  0  0  0  0  0  0

0  0  0  0 13 0  0

0  0  0  0  0  0  7

0 15 0  0  0  0  0

0  0  0  9  0  0  0

0  0  0  0  0  0  0

樣例輸出

這道題其實挺簡單的,最容易想到的方法自然是:

但難點在於尋找剩下的植株中花生最多的,其實對於乙個二維矩陣,用搜尋自是最好的辦法

但是,如果只搜最大值的話,那麼會造成多次搜尋超時

於是,我們將二維矩陣的資訊壓入一維的結構體陣列,並以花生數排序

然後再迴圈就輕鬆的多了

你可以先在輸入時將二維資訊收入一維,在排序

也可以邊輸入,邊將資料變為一維排序

#include#includeusing namespace std;

const int m = 25;

int m, n, k;

int ans;

struct placea[625];

void find(int temp, int step)

bool cmp(place x, place y)

int main()

} sort (a + 1, a + 1 + n * m, cmp);

a[0].x = 0;//初始化

a[0].y = a[1].y;

find(1, 0);

printf("%d", ans);

return 0;

}

題解 花生採摘

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

P1086 花生採摘題解

這道題只是普通的模擬,不是貪心!重點在於這句話 然後再找出剩下的植株裡花生最多的,去採摘它的花生 也就是,你下乙個必須找到剩下花生最多的,而不是按照貪心思想來考慮在限定時間內的最優解 那麼,應題目要求,這只是一道簡單的模擬 思路也很簡單 用結構體存下每乙個有價值的花生植株,其餘結了0個花生的不用管,...

1093 花生採摘

1093 花生採摘 2004年noip全國聯賽普及組 時間限制 1 s 空間限制 128000 kb 題目等級 gold 題目描述 description 魯賓遜先生和多多都很開心,因為花生正是他們的最愛。在告示牌背後,路邊真的有一塊花生田,花生植株整齊地排列成矩形網格 如圖1 有經驗的多多一眼就能...