解題報告題目:
題目大意
:給定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優化題目,最初出現在周源的國家隊 中。儘管這個題是最原始的題,但是這個題並不能用常用的套路。這個題的狀態轉移方程很明顯,但是卻不是標準的斜率優化方程 當然也差不多 優化的話,基本上還是老套路,用乙個單調佇列進行優化。在選擇最優元素...