活動選擇問題的動態規劃解

2021-06-06 11:20:07 字數 682 閱讀 9396

/*

* 題目大意: dp方法解活動選擇問題

解題思路: s(i,j)表示所有活動的集合,即活動ai和aj之間,所有與這兩個活動

相容的活動組成的子集。c[i,j]表示該集合的大小。

核心內容: 對問題的建模,採用該模型分析既可以使用這種dp解決,也可以類似lis問題的dp解決,還可以

貪心解決。但是所有的這些都建立在正確的建立了數學模型的基礎之上。

lis dp方法: c[j]表示集合s(0, j)的最大相容子集大小,c[j] = max(activity_s;

int comp(const void *op1, const void *op2)

const int activity_num_max = 32;

activity_s activities[activity_num_max+2];

const int activity_time_max = 100;

int c[activity_num_max+1][activity_num_max+2]; // 預設初始化為0

int activity_num;

int activity_select_dp()

cout << activity_select_dp() << endl;

return 0;

}

動態規劃 活動選擇問題

乙個遞迴解 設c i j 為sij中最大相容子集中的活動數目,當sij為空集時,c i j 0 當sij非空時,若ak在sij的最大相容子集中被使用,則則問題sik和skj的最大相容子集也被使用,故可得到c i j c i k c k j 1。當i j時,sij必定為空集,否則sij則需要根據上面提...

動態規劃 活動選擇問題

乙個遞迴解 設c i j 為sij中最大相容子集中的活動數目,當sij為空集時,c i j 0 當sij非空時,若ak在sij的最大相容子集中被使用,則則問題sik和skj的最大相容子集也被使用,故可得到c i j c i k c k j 1。當i j時,sij必定為空集,否則sij則需要根據上面提...

活動選擇問題 動態規劃 貪心演算法

問題描述 有乙個需要使用每個資源的n個活動組成的集合s 資源每次只能由乙個活動使用。每個活動ai都有乙個開始時間和結束時間,且 0 si fi 無窮 一旦被選擇後,活動ai就佔據半開時間區間 si,fi 如果 si,fi 和 sj,fj 互不重疊,則稱兩個活動是相容的。該問題就是要找出乙個由互相相容...