Supermarket(貪心 並查集)

2022-03-03 02:24:10 字數 2846 閱讀 4977

題目鏈結

原創的部落格

題意:超市裡有n個商品. 第i個商品必須在保質期(第di天)之前賣掉, 若賣掉可讓超市獲得pi的利潤。

每天只能賣乙個商品。

現在你要讓超市獲得最大的利潤。

n , p[i], d[i] 範圍都在10000以內 。

#include#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

#define ll long long

#define mem(a,x) memset(a,x,sizeof(a))

#define se second

#define fi first

const ll mod=998244353

;const

int inf= 0x3f3f3f3f

;const

int n=4e5+5

;int

n;priority_queue

q;vector

v[n];

intmain()

int ans=0

;

for(int i=10005;i>=1;i--)

if(!q.empty())

}printf(

"%d\n

",ans);}}

用另一種貪心的方法來做,先把所有產品按照利潤從大到小排序,然後這個把這個放在截止日期那天賣出,並做好標記,如果截至日期那天已經有其他產品占用了,那麼可以把這個產品賣出的時間往前推,直到找到可以賣的那一天並標記好。 按照這種思路提交,ac了,不過卻用了141 ms。

用了這個方法之後,再回想了下並查集方法的**, 所謂的用並查集做,實際上是對上面那種方法的優化!

用並查集的關鍵之處是,我們知道按照上面那個方法,假設乙個產品a占用了乙個日期後,那麼如果下次又有乙個產品b和產品a的截止日期是相同的,但是那個日期以被占用了,所以就要往前移動1天,那麼就可以用並查集進行標記,在a占用了那個日期後,把a的截止日期指向前乙個日期,這樣的話,可以直接查詢到他要占用到哪乙個時間。  用了並查集優化後,時間為47ms。

---------------------

原文:

#include#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

#define ll long long

#define mem(a,x) memset(a,x,sizeof(a))

#define se second

#define fi first

const ll mod=998244353

;const

int inf= 0x3f3f3f3f

;const

int n=4e5+5

;int

n;//

vectorv[n];

intvis[n];

struct

node

a[n];

bool

cmp(node x,node y)

intmain()

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

int ans=0

;

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

else}}

}cout}}

無並查集

#include#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

#define ll long long

#define mem(a,x) memset(a,x,sizeof(a))

#define se second

#define fi first

const ll mod=998244353

;const

int inf= 0x3f3f3f3f

;const

int n=4e5+5

;int

n;int

f[n];

struct

node

a[n];

bool

cmp(node x,node y)

int getf(int

x)

return

f[x];

}int

main()

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

int ans=0

;

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

}cout}}

+並查集

Supermarket 並查集或貪心

題目大意 給你n個物品,每種物品都有乙個價值v和最晚 時間t,問你怎樣的順序 可獲得最大利潤?首先說貪心法 把物品按價值降序排序,然後從開始遍歷物品,如果這個物品在最晚期限那天可以 就在那天 並標記這天有物品 如果那天已經有物品 就向前找能 的第乙個時間,標記,當找不到能 的時間,則這個物品不能 因...

POJ1456 Supermarket 並查集版

並查集 題目傳送門 堆作法 貪心的想,我們盡量先把利潤高的商品安排了。假如把利潤高的物品安排在第 x 天,顯然比安排任何利潤比他低的商品在第 x 天更優。這就保證了我們先賣利潤高的物品的貪心正確性。另外,如果能盡量把安排的日子靠後就靠後,這樣擁有決策包含性的性質,這種貪心顯然是最優的。時間複雜度 o...

導遊 (並查集 貪心)

幫助mr.he找出所有遊客帶到目的地,且往返次數最少的路線,如果不能把遊客送到目的地,輸出 no 輸入格式 第一行兩個整數n和r,分別表示城市數量和道路數量,各城市編號為1.n。接下來的r行,每行3個整數 a b p,表示道路ab的最大載客量為p。最後有若干行,每包含3個整數 s d t,分別表示出...