乙個超市有乙個待售商品集合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 需要多少...