題意:給n件商品的**和賣出截至時間,每乙個單位時間最多只能賣出一件商品,求能獲得的最大利潤。
思路:首先是貪心,為獲得最大利潤,優先考慮**最高的,所以要按**降序排列,另外每一件商品售出的時間應越後越好,比如a[i].p,a[i].d分別表示現在要售出的商品的**和截止日期,則應該從a[i].d開始往前找不衝突的點,若找的點大於0,則賣出,若為0即表示因衝突無法賣出。並查集可以很好的實現這一要求,用root[i]表示第i件商品的最近不衝突點,每次售出後需要更新最近的不衝突點。
ac**:
1 #include2 #include3 #include4using
namespace
std;56
const
int maxn=10005;7
struct
nodea[maxn];
1011
bool
cmp(node x,node y)
1415
intn,root[maxn],res;
1617
int getr(int
k)21
22int
main()35}
36 printf("
%d\n
",res);37}
38return0;
39 }
POJ 1456 (貪心 並查集)
題目鏈結 有n件物品,每件物品有個價值和最後的保質期,如果物品在保質期內賣出能拿到對應的價值。沒件物品賣出要1天時間。問n件物品能拿到的最大價值。先貪心排序價值。值的先 而1到t時間段內空閒時間用並查集來維護。每次賣出一件時間。剩下的時間減1,直到為0 是剩下的時間,也就是fin t include...
POJ 1456 貪心 並查集
題目大意 給n個商品,每個商品有利潤pi和過期時間di,每天只能賣乙個商品,過期的不能再賣,求如何安排每天賣的東西使收益最大。題目思路 先將利潤從大到小排序,由於每個物品賣的越遲,給其他物品留下的空間也就越多,所以需要將物品放在能賣的最後一天賣。建立並查集,維護每個點最後乙個可以賣的地方,每賣出乙個...
poj 1456 貪心 並查集優化
題意 題目鏈結 有n個商品,每個商品有兩個屬性val 和day,val表示商品的價值,day 表示商品最後賣出去的期限,賣每個商品需要一天的時間。題解 貪心,貪心測率和hdu 1789 一樣。按照val從大到小排序。然後從第乙個開始,如果它的最後期限沒有被占用,這天就用來買這件商品,如果被占用就在這...