poj1180 dp斜率優化

2021-06-19 06:11:25 字數 942 閱讀 3943

解題報告題目:

題目大意

:給定n

個工作,可以任意分組,最後每個工作的花費是

o[i]*f[i],

其中o[i]是i

所在分組整體被完成的時間,給定開始時間,機器啟動時間

s,求完成所有任務最小花費。

演算法:動態規劃

+斜率優化

思路:首先想到了

dp[i] = min, sumf[i] = f[i] + f[i + 1]….

然後化解這個式子就能斜率優化了。這裡處理

o[i]

也算是乙個技巧了,將由工作

i導致的

i之後的花費加到

i上,這樣每次的開始時間都成為了

0,從後往前

dp即可,其他都一樣。

提交情況

accepted 1次

經驗與收穫

:對斜率優化理解還是不到位。

ac code:

#include

#define

maxn 10010

intsumt[maxn], sumf[maxn], dp[maxn], strack[maxn], s, t[maxn], f[maxn], n;

bool

rise(int k, int j, int i)

bool

turn_right(int p, int q, int r)

intmain()

strack[0] = dp[n + 1] = top = res = 0;

strack[++top] = n;

dp[n] = (s + sumt[n]) * sumf[n];

for(i = n - 1; i > 0; i --)

printf("%d\n", dp[1]);

} return 0; }

poj 1180 斜率優化dp

這個題目要是順著dp的話很難做,但是倒著推就很容易退出比較簡單的關係式了。dp i min dp u sum u 1 sum i 1 s f i dp i 代表從i到結尾需要花費的代價,sum i 表示1到i的時間和,f i 代表i到n的代價和。然後對於i狀態來說,j由於k等價於 dp j dp k...

POJ 1180 斜率優化DP

前記 好像半年前就見過這道題,折騰了半天都不會,剛學斜率優化,發現這題挺經典的,也不難,只要能想到倒推 題意 n個任務排成乙個序列在一台機器上等待完成 順序不得改變 這n個任務被分成若干批,每批包含相鄰的若干任務。從時刻0開始,這些任務被分批加工,第i個任務單獨完成所需的時間是ti。在每批任務開始前...

POJ 2018 斜率優化DP

給一堆數,選不少於f個數的子串行,求均值最大的子串行。最原始的斜率dp優化題目,最初出現在周源的國家隊 中。儘管這個題是最原始的題,但是這個題並不能用常用的套路。這個題的狀態轉移方程很明顯,但是卻不是標準的斜率優化方程 當然也差不多 優化的話,基本上還是老套路,用乙個單調佇列進行優化。在選擇最優元素...