位元組題 多任務分配

2021-10-09 22:25:49 字數 2086 閱讀 1864

程式設計題3_位元組跳動2018校招大資料方向(第一批)_牛客網

這題的處理邏輯並不難,但是處理起來需要考慮的東西很多,實現起來是不容易的,需要維護的陣列較多。

先明確題意:

注意:程式設計師每次檢視的時候能看到的是每個pm最想完成的乙個idea(,如果我們為每個pm維護乙個優先順序佇列的話,那麼程式設計師每次檢視的時候只能看到隊首的元素。

所以整體思路過程是:

整體模擬的是乙個隨時間的輪轉過程,退出迴圈的條件就是所有idea(p個)均被執行。由於題目要求的是每個idea的完成時間,所以還需要維護乙個完成時間的陣列,不過每個idea被程式設計師選中的時候,它的完成時間就已經確定下來了。

每個idea的歷程是:未被提出(在ideas池子裡)->提出,進入已提出佇列->進入就緒佇列->被選中執行。

#include#include#include#includeusing namespace std;

vectorres;

class idea

};struct cmp_pm

};bool cmp_programmer(const idea &item1, const idea &item2)

void process(int n, int m, int p, vector& ideas));//先按照提出時間公升序

vector, cmp_pm>> idea_proposed(n+1);//每個pm當前時間點已經提出的idea(已提出佇列)

vectortime_left(m+1, 0);//記錄每個程式設計師的當前任務的剩餘處理時間

int cur_time = 0, last_idx = 0;//last_idx記錄上一次新增到已提出佇列的下標

while (num_of_ideas_left)

sort(idea_ready.begin(), idea_ready.end(), cmp_programmer);//按照程式設計師的準則排序

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

res[item.idx-1] = cur_time + item.time_needed;//完成時間

--num_of_ideas_left;}}

}}int main()

process(n, m, p, ideas);

for (const auto &v : res) cout << v << endl;

return 0;

}

其實就緒佇列可以再使用乙個優先順序佇列而不是陣列,方便插入和刪除。不過需要注意優先順序佇列的比較規則,不要搞反

#include#include#include#includeusing namespace std;

vectorres;

class idea

};struct cmp_pm

};struct cmp_programmer

};void process(int n, int m, int p, vector& ideas));//先按照提出時間公升序

vector, cmp_pm>> idea_proposed(n+1);//每個pm當前時間點已經提出的idea(已提出佇列)

vectortime_left(m+1, 0);//記錄每個程式設計師的當前任務的剩餘處理時間

int cur_time = 0, last_idx = 0;//last_idx記錄上一次新增到已提出佇列的下標

while (num_of_ideas_left)

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

res[item.idx-1] = cur_time + item.time_needed;//完成時間

--num_of_ideas_left;}}

}}int main()

process(n, m, p, ideas);

for (const auto &v : res) cout << v << endl;

return 0;

}

任務分配問題

任務分配問題是在加權 二分圖中尋找最大 或最小 加權匹配的問題。隱藏 分為以下幾類 這些問題都是組合優化的研究物件。有一些員工要完成一些任務。各個員工完成不同任務所花費的時間都不同。每個員工只分配一項任務。每項任務只被分配給乙個員工。怎樣分配員工與任務以使所花費的時間最少?婚配問題 有一些男人和一些...

任務分配問題

題目要求 輸入 第一行是操作員的人數n 4 輸出 完成所有任務的最短時間。測試用例 test input expected output time limitation memory limitation extra process number test case 1 view plain 4 3...

演算法題 任務分配問題 匈牙利演算法

一 問題描述 問題描述 n個人分配n項任務,乙個人只能分配一項任務,一項任務只能分配給乙個人,將一項任務分配給乙個人是需要支付報酬,如何分配任務,保證支付的報酬總數最小。問題數學描述 二 例項分析 窮舉法 在講將匈牙利演算法解決任務問題之前,先分析幾個具體例項。以3個工作人員和3項任務為例項,下圖為...