SDOI2008 Sue的小球 題解

2022-06-12 20:03:07 字數 1904 閱讀 1281

\(~~~~\) 給了 \(n\) 個小球,第 \(i\) 個小球在 \(x_i\) 初始分值為 \(y_i\) ,同時它會以 \(\dfrac/\texttt\) 的速度降低。(可以降低為負數)從初始位置開始,每個單位時間可以移動 \(1\) 單位長度。收集小球不需要時間,求收集所有小球後能獲得的最大分值。

\(~~~~\) 首先,可以想到對每個球按位置從小到大排序。由於總的得分固定,我們可以求最小損失,然後考慮:對於兩個小球 \(l,r (x_l,若它們都被收集了,則小球 \(x\in[l,r]\) 也被收集一定是最優方案:

\(~~~~\)證明:顯然。 每個小球被收集,一定是從起始點走到過該小球的,則此時順手收集路上的小球一定不會使答案變劣,因為收集不需要時間。

\(~~~~\) 所以,我們考慮已經收集了 \([l,r]\) 的小球時,下一步一定是擴充套件到 \(l-1\) 或 \(r+1\) ,不難想到定義 \(\texttt\) 狀態:令 \(dp_\) 表示已經收集 \([l,r]\) 的所有小球時的最小損失。考慮 \(\texttt\) 轉移時需要當前的位置,因此增加一維,用來記錄最後停留在 \(i\) 或者 \(j\) (當然也可以定義兩個陣列)。

\(~~~~\) 發現還是有問題, \(\texttt\) 轉移還需要記錄當前的時間,可是如果我們把時間也加在 \(\texttt\) 維度上,時間就爆了。

\(~~~~\) 這時就輪到這道題的精髓了——提前計算。我們是可以算出每一次轉移時的時間的,那如果我們把每次轉移時其他小球損失的分數也加上去,既然每個小球都將會被收集,那麼最後的效果其實是一樣的。

\(~~~~\) 具體來說,如果有小球 \([l,r]\) 已經被收集,則下一次轉移時 \([1,l)\) 與 \((r,n]\) 的所有會被消耗的分數都可以直接加在下一次。

\(~~~~\) 若設:\(pre_\) 表示 \(\sum_^j v_k\) ,則有 \(\texttt\) 轉移方程。

\[\left\

dp_=\min(~dp_+(x_-x_i)\times(pre_-pre_)~,~dp_+(x_j-x_i)\times (pre_-pre_)~)\\

dp_=\min(~dp_+(x_j-x_i)\times(pre_-pre_)~,~dp_+(x_j-x_)\times(pre_-pre_)~)

\end\right.

\]\(~~~~\) 然後轉移就好了。

\(~~~~\) 注意處理初始值時可以增加乙個小球使得它的 \(x=x_0,y=0,v=0\) ,初始化時就令這個小球為 \(0\) 即可。

#include #include #include #define ll long long

using namespace std;

templatevoid read(t &x)

while(s>='0'&&s<='9')

x*=f;

}struct nodeb[1005];

inline bool cmp(node x,node y)

int calc(int l,int r)

int main()

for(int i=1;i<=n;i++)

//dp1[i][j] 收集了第 i個 至 第 j個彩蛋 最後停留在 i

//dp2[i][j]··················· j

for(int len=2;len<=n;len++) }

// printf("%d %d %d\n",tot-min(dp1[1][n],dp2[1][n]),dp1[1][n],dp2[1][n]);

printf("%.3lf",(tot-min(dp1[1][n],dp2[1][n]))/1000.0);

return 0;

}

\(~~~~\)

sue的小球 牛客(區間dp)

sue和sandy最近迷上了乙個電腦遊戲,這個遊戲的故事發在美麗神秘並且充滿刺激的大海上,sue有一支輕便小巧的小船。然而,sue的目標並不是當乙個海盜,而是要收集空中漂浮的彩蛋,sue有乙個秘密 只要她將小船劃到乙個彩蛋的正下方,然後使用秘密 便可以在瞬間收集到這個彩蛋。然而,彩蛋有乙個魅力值,這...

BZOJ2037 Sue的小球(動態規劃)

bzoj 莫名想到這道題目 很明顯是一樣的 設 f i j 0 1 表示已經接到了 i j 這一段的小球 當前在 i 或者在 j 的最小費用 這個費用是隨著時間增長,沒有被接到的小球產生的 這樣就可以避免存下時間 提前就把費用減去 include include include include in...

洛谷 P2466 Sue的小球 解題報告

sue和sandy最近迷上了乙個電腦遊戲,這個遊戲的故事發在美麗神秘並且充滿刺激的大海上,sue有一支輕便小巧的小船。然而,sue的目標並不是當乙個海盜,而是要收集空中漂浮的彩蛋,sue有乙個秘密 只要她將小船劃到乙個彩蛋的正下方,然後使用秘密 便可以在瞬間收集到這個彩蛋。然而,彩蛋有乙個魅力值,這...