jzoj1669 最大收益

2021-09-25 19:10:46 字數 1898 閱讀 8763

description

給出n件單位時間任務,對於第i件任務,如果要完成該任務,需要占用[si, ti]間的某個時刻,且完成後會有vi的收益。求最大收益。

澄清:乙個時刻只能做一件任務,做乙個任務也只需要乙個時刻。

input

第一行乙個整數n,表示可供選擇的任務個數.

接下來的第二到第n+1行,每行三個數,其中第i+1行依次為si,ti,vi

output

輸出最大收益

sample input

輸入1:

1 1 1

1 1 2

輸入2:

1 1 5

2 2 3

1 2 4

輸入3:

1 2 10

2 3 10

3 4 10

4 5 10

1 1 5

5 5 6

sample output

輸出1:

樣例1解釋:

選擇第二個任務可以得到價值2。

輸出2:

樣例2解釋:

在第乙個時刻完成任務一,在第二個時刻完成任務三,這樣得到最大總價值9。

輸出3:

樣例3解釋:

時刻1完成第乙個任務,時刻2完成第二個任務,時刻3完成第三個任務,時刻4完成第四個任務,時刻5完成第六個任務,所得的總收益是10+10+10+10+6=46,為最大收益。

data constraint

在佔12%分數的資料中有n≤20。

在佔30%分數的資料中有n≤500。

在所有資料中,n≤5000,1≤si≤ti≤108,1≤vi≤108。

乙個顯然的錯誤解法:

貪心,按收益從大到小加區間,能加則加(這個是對的)

然後排序+維護左端點

但這樣會掛

在上面的基礎上加上堆維護右端點,每次把合法的區間右端點丟進去

每次取最小的右端點判斷是否合法

時間複雜度:o(n2log n)

因為帶了乙個log所以會t

考慮把log去掉

貪心加區間,每次加到x(x=si)上

如果和其它區間衝突,那麼帶乙個t更大的去x+1找

(因為無論如何都要帶乙個走,那麼肯定帶t更大的那個)

這樣做本質是匈牙利,因為有了上面的貪心就可以優化到o(n2)

#include

#include

#include

#include

#define fo(a,b,c) for (a=b; a<=c; a++)

#define fd(a,b,c) for (a=b; a>=c; a--)

#define max(a,b) (a>b?a:b)

#define min(a,b) (a#define len 10000007

using

namespace std;

int hash[len+1]

[2];

int n,i,j,k,l;

long

long ans;

struct type a[

5001];

inthash

(int t,

int s,

bool type)

bool

cmp(type a,type b)

bool

find

(int t,

int x)

if(a[t]

.y.y)}

elseif(

find

(t,x+1)

)return1;

return0;

}int

main()

最大收益問題

time limit 2000ms memory limit 65536k 有疑問?點這裡 鐵牌狗最近迷上了一款遊戲,但鐵牌狗實在是太笨了,他還是要請求你的幫助。有乙個n行m 列的矩陣 a,矩陣 a中每個數字均為正整數,現在鐵牌狗要在其中選出乙個r行 c列的子矩陣 b,這個子矩陣 b中各個數字之和即...

公司最大收益

一家家具公司生產桌子和椅子。現有113個單位的木材。每張桌子要使用20個單位的木材,售價是30元 每張椅子要用16個單位的木材,售價是20元。使用已有的木材生產桌椅 不一定要用光木材 最多可以賣多少錢?首先我們看這個問題,我們能發現這是乙個優化問題,是在某種約束條件下求目標的最優值。對於這個問題來說...

Isap 最大收益問題

永樂理工大學的實驗室計畫了一系列實驗專案,這些實驗專案需要不同的實驗儀器,而配置儀器需要費用,但實驗也會產生經濟效益。請設計乙個演算法,如何才能有最大淨收益?模型歸納為二分圖匹配模型,假設實驗專案為e 儀器為,那麼假設配置儀器的費用使用ci表示,經濟收益用pi表示,那麼,我們利用二分圖實現該問題,首...