帶權的活動安排問題 利益最大化 DP

2021-09-18 00:17:53 字數 1098 閱讀 9617

基礎的貪心問題-活動安排問題是這種問題的特殊情況(權值為1)。但這個問題不能用貪心演算法而是應該用動態規劃演算法來求解。這種問題下的另一種較特殊情況是每段任務的權值是它的時間長度,使活動安排時間最滿,同樣要用到動態規劃演算法。

思路是:先將活動按照結束時間排序(和貪心類似),然後從第乙個活動開始遍歷這些任務,同時維護乙個全域性最大值,到每個活動結束的最大值。排序時間複雜度為o(nlogn),後面一段時間複雜度為o(n)。

狀態轉移方程為

ans = max(ans, last + edges[i].val);

其中,ans為全域性最大值,last為截止到上乙個和本任務不產生衝突的任務所儲存的最大值。有幾個邊界條件需要注意。

**(沒有測過大量資料,不知道有沒有bug,不過大方向應該是對的)

#include

#include

using

namespace std;

struct edge

;bool

cmp(edge a, edge b)

intmain()

sort

(edges, edges + n, cmp)

;int ans =0;

for(

int i =

0; i < n;

++i)

if(j ==

0) ans =

max(ans, last + edges[i]

.val)

;// 作為它的邊界 }if

(i ==

0) ans =

max(ans, last + edges[i]

.val)

;// 第乙個資料,直接設為邊界

edges[i]

.ans = ans;

cout <<

"now the ans = "

<< ans << endl;

} cout <<

"the end ans = "

<< ans << endl;}/*

31 4 2

7 10 3

2 6 8

*/

WPF中窗體最大化問題的解決方法

前言 在建立wpf應用的時候,你第乙個看到的就是窗體類。它作為窗體的基礎,提程式設計客棧供標準的邊框 工具條 最大化 最小化和關閉按鈕。wpf窗體是xaml檔案和後台 檔案的混合體。本文將詳細介紹umqrvgq關於wpf窗體最大化問題的相關內容,下面話不多說了,來一起看看詳細的介紹吧 遇到的問題資訊...

帶權的最大子段和問題

description 在短學期和演算法導論課期間,我們一共討論了四種求解最大子段和問題的方法,上一屆的期末考試也考了交替出現的子段和問題,今天我們再拓展一下,研究一下最大的帶權子段和問題,這個問題我們已經找到了很有意思的應用背景。例如已知三個權係數分別為1 2 1,考慮從i開始的序列,帶權的累加和...

如何把自己的時間最大化利用 分析存在的問題

進入職場已經有5年的時間了,會議起來,這5年間,在同一家公司,做了很多不同的事情,但是現在想來,這幾年實際做了什麼已經沒有太深的印象。剛到這個公司時,很是無知,什麼東西都不了解,完全是從0開始的學習基礎知識,在到公司三個月,也就是轉正時,已經把工作中所需要的基本技能學完,後面就是不停的做業務,開發各...