poj 1180 斜率優化dp

2021-09-07 21:59:44 字數 632 閱讀 8118

這個題目要是順著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])/(sum[k-1]-sum[j-1])

然後f[i]隨著i遞減而遞增,所以就可以利用斜率優化的辦法來搞了。

#include #include #include using namespace std;

const int maxn=1e4+9;

long long sum[maxn],f[maxn];

long long dp[maxn];

int que[maxn];

bool chk1(int k,int j,int i)

int main()

for(int i=n-1;i>=1;i--) f[i]+=f[i+1];

int front=1,end=0;

que[++end]=n+1;

dp[n+1]=0;

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

{while(front

POJ 1180 斜率優化DP

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

poj1180 dp斜率優化

解題報告題目 題目大意 給定n 個工作,可以任意分組,最後每個工作的花費是 o i f i 其中o i 是i 所在分組整體被完成的時間,給定開始時間,機器啟動時間 s,求完成所有任務最小花費。演算法 動態規劃 斜率優化 思路 首先想到了 dp i min,sumf i f i f i 1 然後化解這...

POJ 2018 斜率優化DP

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