程式設計題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項任務為例項,下圖為...