hdu 4864 Task 貪心 技巧

2022-04-14 11:32:03 字數 1054 閱讀 2119

題目鏈結

一道很有技巧的貪心題目。

題意:有n個機器,m個任務。每個機器至多能完成乙個任務。對於每個機器,有乙個最大執行時間xi和等級yi,

對於每個任務,也有乙個執行時間xj和等級yj。只有當xi>=xj且yi>=yj的時候,機器i才能完成任務j,並獲得

500*xj+2*yj金錢。問最多能完成幾個任務,當出現多種情況時,輸出獲得金錢最多的情況。

分析:機器和任務都按照先拍x從大到小,再拍y從大到小的順序。然後遍歷任務,注意f陣列的作用,f陣列標

記大於當前任務時間的機器的等級個數, 由於任務都是從大到小排序了,所以接下來時間已經不是影響了,因為

已經遍歷過的機器的時間都是大於 將要遍歷的機器的時間的。所以只需要從 這些符合時間條件的機器裡選擇乙個

等級最小的,以免因為等級影響後面的遍歷。 為什麼要按照先x排序呢,因為500 > 2*100; 為什麼按照y從大到

小,因為x相等的情況下,y越大,計算的值越大。

最後注意hdu的int64;

1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8

#define ll long long

9using

namespace

std;

10const

int maxn = 100000+10;11

int n, m, f[110

];12

struct

node

13 ma[maxn], ta[maxn];

1617

bool

cmp(node a, node b)

1823

intmain()

2447

for(k = ta[i].y; k <= 100; k++)

4856}57

}58 printf("

%d %i64d\n

", cnt, ans);59}

60return0;

61 }

hdu 4864 Task 貪心 二分 set

題意 有n臺機器,m個任務,每台機器有xi,yi,每個任務也有xj,yj,當乙個任務可以被處理的條件是,xj xi 且 yj 貪心的話,如果是遍歷任務的話,那麼我們希望盡可能做時間和level更高的任務,我們可以先按時間排,時間相同按level,遞增排,機器也是按這個排。然後從最大價值的任務開始遍歷...

HDU 4864 Task(2014多校 貪心)

task 比賽當時思路想的差不多,感覺能過的,該處理的也都處理到了,最後還是沒過,可能是二分寫錯了吧 大意 給你n個機器,m個要完成的任務,每個機器跟任務都有兩個屬性,機器是最大工作時間跟等級,任務是需要工作的時間跟等級。完成乙個任務可以得到500 工作時間 2 等級 的報酬。完成任務的條件是機器的...

杭電ACM 4864,Task(貪心)

題意 有n個機器和m個任務,每個機器每天都有乙個最大工作時長x1,以及最大工作難度y1,每個任務都有乙個工作時間x2,工作難度y2。每完成乙個任務多有乙個收益500 x2 2 y2。假設每個機器一天只能完成乙個任務,乙個任務只能又乙個機器完成,不可由多個一起完成。求一天當中能完成的最多工,並輸出收益...