Poj 2586 解題報告

2021-07-09 14:55:40 字數 1595 閱讀 6570

乙個超市有乙個待售商品集合prod,集合中每乙個商品都有乙個最晚銷售時間,每乙個產品都需要乙個單獨的單位時間銷售(即兩件商品不能同時銷售),乙個銷售計畫是乙個有序子集sell,sell<=prod,根據子集中的順序,每乙個商品都能在規定時間前銷售出去。乙個銷售計畫的利潤則為sell中的所有商品的利潤和。

比如,如果prod=,

(pa,da)=(50,2), (pb,db)=(10,1), (pc,dc)=(20,2), (pd,dd)=(30,1),其中

p*表示商品

*的價值,

d*表示商品的最晚銷售時間。比如乙個銷售計畫

sell=,d

在0開始1

時刻結束銷售,a在

1開始2時刻結束銷售,所有商品都在規定時間前完成了銷售,其利潤為

80,其他銷售計畫如下圖:

寫乙個程式,來計算乙個

prod

的最大利潤銷售計畫是多少利潤。

輸入:

一組資料以乙個整數n(

0 <= n <= 10000

)開始,接下來有n對

pi,di,

1 <= pi <= 10000 and 1 <= di <= 10000

,數與數之間有空格隔開。

輸出:

每組資料一行,輸出最大利潤是多少

樣例輸入:

4  50 2  10 1   20 2   30 1

7  20 1   2 1   10 3  100 2   8 2   5 20  50 10

樣例輸出:80

185

題意:

只有在銷售時間內售出的貨物可以得到對應d的利潤,同一時段只能賣乙個貨物,怎麼得到最大利潤

思路:(貪心)

將所有的利潤進行排序,先讓當前利潤最高的貨物在規定時間的最後一天賣出,如果規定時間被佔(用乙個visit陣列來存時間是否被占用),則向前搜尋沒有被占用的時間,在那一天賣出此貨物。

解釋:因為題目並沒有要求輸出sell的順序,只要求輸出最大利潤,所以只要保證利潤大的賣出,且賣出時間越靠後可以讓後面利潤低的越有機會賣出。

注意:

1.要用結構體來存乙個貨物的時間限制和利潤。因為排序的時候會讓他們的順序混亂,不能一一對應 2.

讀入的時候不知道有幾組資料,所以要判定檔案是否讀完,即判定檔案結束符『eof』

#include#include#include#include#includeusing namespace std;

struct good;

good a[20000];

bool cmp(good g,good h)

}int main()

sort(a+1,a+n+1,cmp);

for(int i=1;i<=n;i++)

else}}

} printf("%d\n",tot);

}}

poj解題報告 2586

這題我是用的貪心演算法,其實不用也可以,列舉也能解決,因為情況不多。因為是每連續5個月必有虧損,而一年只有1 5,2 6,3 7,4 8 8 12共8種情況。現在設盈餘為s,虧損為d,可列出以下幾種情況。ssssdssssdss 4ssssddsssddss 3s 2d ssdddssdddss 2...

POJ 2586 簡單貪心

大意是乙個公司在12個月中,或固定盈餘s,或固定虧損d.但記不得哪些月盈餘,哪些月虧損,只能記得連續5個月的代數和總是虧損 0為虧損 而一年中只有8個連續的5個月,分別為1 5,2 6,8 12 問全年是否可能盈利?若可能,輸出可能最大盈利金額,否則輸出 deficit 先判斷是否可以組成連續5個月...

POJ 2586 暴力水題

題目 考驗英語和語文能力。錯誤分析 不想讀題。題目出的有點不夠清楚。題目拆解 1 12個月的盈虧分析 2 每乙個月要麼是盈要麼是虧,不同月份盈利額不會改變 虧損額也不會改變。照應input 3 每連續的5個月一定是虧損的 4 求12個月總的算起來,盈利多少?如果虧損,虧損最少為多少?num 需要多少...