魯賓遜先生有乙隻寵物猴,名叫多多。這天,他們兩個正沿著鄉間小路散步,突然發現路的告示牌上貼著一張小小的紙條:「歡迎免費品嚐我種的花生!——熊字」。魯賓遜先生和多多都很開心,因為花生正是他們的最愛。在告示牌背後,路邊真的有一塊花生田,花生植株整齊地排列成矩形網格(如圖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 有經驗的多多一眼就能...