贪心:活动安排问题(C++)
设有n个活动的集合 M = {1,2,…,n},其中每个活动都要求使用同一资源,如演讲会场等,而在同一时间内只有一个活动能使用这一资源。
每个活动 i 都有一个要求使用该资源的起始时间 si 和一个结束时间 fi,且 si < fi。如果选择了活动i,则它在半开时间区间 [si ,fi ) 内占用资源。若区间 [si , fi )与区间 [sj, fj ) 不相交,则称活动i与活动j是相容的。当 si ≥ fj 或 sj ≥ fi 时,活动 i 与活动 j 相容。
#include <iostream> using namespace std; void Func(int s[], int f[], int n) { int i = 0;//第一次活动开始时间,必定选择 cout << "活动时间:" << s[i] << "~" << f[i] << endl; for (int j = 1; j < n; ++j) {//下一次活动开始时间,需要满足大于上一活动的结束时间 if (s[j] >= f[i]) { cout << "活动时间:" << s[j] << "~" << f[j] << endl; i = j; } } } int main() { int s[] = { 1,3,7,5,3,9,13 }, f[] = { 2,6,8,5,8,10,12 }; Func(s, f, sizeof(s) / sizeof(s[0])); system("PAUSE"); return 0; }
s[]表示开始时间组,f[]表示结束时间组。