POJ 1456 貪心 並查集

2021-09-25 22:13:12 字數 754 閱讀 7009

題目大意:給n個商品,每個商品有利潤pi和過期時間di,每天只能賣乙個商品,過期的不能再賣,求如何安排每天賣的東西使收益最大。

題目思路:先將利潤從大到小排序,由於每個物品賣的越遲,給其他物品留下的空間也就越多,所以需要將物品放在能賣的最後一天賣。建立並查集,維護每個點最後乙個可以賣的地方,每賣出乙個就讓當前點和前乙個點並起來。

以下是**:

#include#include#includeusing namespace std;

#define inf 0x3f3f3f3f

#define rep(i,a,b) for(int i=a;i<=b;i++)

#define per(i,a,b) for(int i=a;i>=b;i--)

#define ll long long

const int maxn = 1e5+5;

const int mod = 1e9+7;

int n;

struct nodea[maxn];

bool cmp(node a,node b)

int pre[maxn];

int find(int x)

int main()

rep(i,1,maxx)pre[i]=i;

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

int ans=0;

rep(i,1,n)

}cout<}

return 0;

}

POJ 1456 (貪心 並查集)

題目鏈結 有n件物品,每件物品有個價值和最後的保質期,如果物品在保質期內賣出能拿到對應的價值。沒件物品賣出要1天時間。問n件物品能拿到的最大價值。先貪心排序價值。值的先 而1到t時間段內空閒時間用並查集來維護。每次賣出一件時間。剩下的時間減1,直到為0 是剩下的時間,也就是fin t include...

poj 1456 貪心 並查集優化

題意 題目鏈結 有n個商品,每個商品有兩個屬性val 和day,val表示商品的價值,day 表示商品最後賣出去的期限,賣每個商品需要一天的時間。題解 貪心,貪心測率和hdu 1789 一樣。按照val從大到小排序。然後從第乙個開始,如果它的最後期限沒有被占用,這天就用來買這件商品,如果被占用就在這...

POJ 1456 基礎並查集 貪心

考慮這樣乙個貪心策略,利潤大的物品肯定要有較高的優先順序,我們先把商品按利潤排序,每個商品 肯定只能在 1到di 1這其中的乙個時間點賣出,我們可以用並查集維護每個商品能賣出的最左時間點 當乙個商品在當前時間點 t 賣出,那麼t這個位置就被佔據了,我們得合併t 和 t 1 並把t 1作為t的根,這樣...