2013-03-10 35 views
1

這是一個問題,沒有人能在我的大學「閃光測試」在我的課正確回答:動態規劃 - 任務調度

我們給出:

INTñ< 1000的時隙

INT [] C:-10 000 < = C [I] < = 10 000支付對應於每個時隙的

INT T:槽數,我們必須使用

問題陳述以下列方式:

懶惰工人具有時間N個時隙中一個總的工作日。

對於每個時間段他得到一定的支付(C [我] - 這不切實際,也可以是負面的)。

他想選擇正好T槽的間隔,以便他能得到最大的付款。我們必須選擇他將工作的時間間隔。例如[1,4] - 從第一個位置到第四個位置。

問題是,每當他休息一下,當他回來工作時,他的第一個工作崗位將不會被支付,因爲他已經習慣了再次工作,就像一個懶惰的人一樣。因此,我們也可以選擇像[5,5]這樣的空白區間,如果我們有負面支付,這可能會派上用場。無論事先支付什麼款項,都將獲得付款0。

使其更清晰,我要舉一個簡單的例子:

比方說,我們有N = 5個時隙,我們要選擇T = 4。 C = {3,9,1,1,7}

最好的解決方案是間隔[1,2]; [4,5]付款總額爲9 + 7 = 16

我們總共覆蓋了T = 4個時隙,解決方案是有效的。

回答

0

我在這個問題上的第一次嘗試,雖然可能會更快。假設f(i,j,t)表示在子陣列N [i,j](包括i和j)內擬合t點的最佳方式,使得N [i]被覆蓋並且N [j]被覆蓋。現在注意到,f(i,j,t)= max {f(i,j-1,t-1)+ C [j],max_ {1 < k < j- 1)}。如果(i,j,t)= 0,則基本情況爲f(i,j,t)= 0,f(i,j,1)= inf,並且f i,j,2)= C [i] + C [j]。我認爲複雜度爲O(N^3 * T),因爲表f的大小爲N^2 * T,而在f內我們需要取最大值(k < j-i)以獲得N的額外因子在我們的複雜性。因此O(N^3 * T)。希望我沒有忽視問題中的一些事情。

爲了找到表f中的解,只需做max_ {i,j} f(i,j,T)。