假設有一個電影節,展示來自不同國家的各種電影。現在,一個參與者想要參加盡可能多的不重疊的電影,我們需要幫助他們找出他們可以參加多少部電影。
有一個結構體 Movie,它有以下成員:
還有一個結構體 Festival,它有以下成員:
我們需要建立並初始化一個 Festival 對象,其中包含兩個陣列 'timeBegin' 和 'duration',它們分別包含多部電影的開始時間和持續時間。整數 n 表示電影的總數,也用來初始化物件。我們進一步使用該物件來計算參與者可以完整觀看多少部電影。
因此,若輸入是timeBegin = {1, 3, 0, 5, 5, 8, 8},duration = {3, 2, 2, 4, 3, 2, 3},n = 7 ,那麼輸出將是4
參與者可以在該電影節上完整觀看4 部電影。
為了解決這個問題,我們將按照以下步驟進行:
讓我們看一下以下實作以更好理解:
#include<bits/stdc++.h> using namespace std; struct Movie { int timeBegin, duration, timeEnd; bool operator<(const Movie& another) const { return timeEnd < another.timeEnd; } }; struct Festival { int count; vector<Movie> movies; }; Festival* initialize(int timeBegin[], int duration[], int count) { Festival* filmFestival = new Festival; filmFestival->count = count; for (int i = 0; i < count; i++) { Movie temp; temp.timeBegin = timeBegin[i]; temp.duration = duration[i]; temp.timeEnd = timeBegin[i] + duration[i]; filmFestival->movies.push_back(temp); } return filmFestival; } int solve(Festival* fest) { int res = 0; sort(fest->movies.begin(), fest->movies.end()); int timeEnd = -1; for (int i = 0; i < fest->count; i++) { if (fest->movies[i].timeBegin >= timeEnd) { res++; timeEnd = fest->movies[i].timeEnd; } } return res; } int main(int argc, char *argv[]) { int timeBegin[] = {1, 3, 0, 5, 5, 8, 8}; int duration[] = {3, 2, 2, 4, 3, 2, 3}; Festival * fest; fest = initialize(timeBegin,duration, 7); cout << solve(fest) << endl; return 0; }
int timeBegin[] = {1, 3, 0, 5, 5, 8, 8}; int duration[] = {3, 2, 2, 4, 3, 2, 3}; Festival * fest; fest = initialize(timeBegin,duration, 7);
4
以上是C++程序,用於計算參與者在電影節上能完整觀看多少部電影的詳細內容。更多資訊請關注PHP中文網其他相關文章!