sue和sandy最近迷上了乙個電腦遊戲,這個遊戲的故事發在美麗神秘並且充滿刺激的大海上,sue有一支輕便小巧的小船。然而,sue的目標並不是當乙個海盜,而是要收集空中漂浮的彩蛋,sue有乙個秘密**,只要她將小船劃到乙個彩蛋的正下方,然後使用秘密**便可以在瞬間收集到這個彩蛋。然而,彩蛋有乙個魅力值,這個魅力值會隨著彩蛋在空中降落的時間而降低,sue要想得到更多的分數,必須盡量在魅力值高的時候收集這個彩蛋,而如果乙個彩蛋掉入海中,它的魅力值將會變成乙個負數,但這並不影響sue的興趣,因為每乙個彩蛋都是不同的,sue希望收集到所有的彩蛋。 然而sandy就沒有sue那麼浪漫了,sandy希望得到盡可能多的分數,為了解決這個問題,他先將這個遊戲抽象成了如下模型: 以sue的初始位置所在水平面作為x軸。 一開始空中有n個彩蛋,對於第i個彩蛋,他的初始位置用整數座標(xi, yi)表示,遊戲開始後,它勻速沿y軸負方向下落,速度為vi單位距離/單位時間。sue的初始位置為(x0, 0),sue可以沿x軸的正方向或負方向移動,sue的移動速度是1單位距離/單位時間,使用秘密**得到乙個彩蛋是瞬間的,得分為當前彩蛋的y座標的千分之一。 現在,sue和sandy請你來幫忙,為了滿足sue和sandy各自的目標,你決定在收集到所有彩蛋的基礎上,得到的分數最高。
第一行為兩個整數n, x0用乙個空格分隔,表示彩蛋個數與sue的初始位置。
第二行為n個整數xi,每兩個數用乙個空格分隔,第i個數表示第i個彩蛋的初始橫座標。
第三行為n個整數yi,每兩個數用乙個空格分隔,第i個數表示第i個彩蛋的初始縱座標。
第四行為n個整數vi,每兩個數用乙個空格分隔,第i個數表示第i個彩蛋勻速沿y軸負方向下落的的速度。
乙個實數,保留三位小數,為收集所有彩蛋的基礎上,可以得到最高的分數。
3 0
-4 -2 2
22 30 26
1 9 8
0.000
資料範圍:
n < = 1000,對於100%的資料。 -10^4 < = xi,yi,vi < = 10^4
一讀完題就感覺像區間dp的題,而且這個題目標著就是區間dp,但是想不出來怎麼向區間dp上推,老想著用類似記憶化搜尋的方法來,後來看了看大佬們的題解看明白了。
我們想啊,這個人在x軸上的移動是連續的,所以當他走過一段路程之後,這個連續區間的彩蛋就被收集了,而接著運動的時候就會擴大(或者反向移動到另一邊再擴大)這個區間。所以這就能從區間dp的角度進行思考了。
然後怎麼確定乙個區間呢,我們將所有的彩蛋按照x的座標進行排序,就可以找出一塊兒連續的區間了。
我們用dp[i][j][0/1]記錄當收集完[i,j]之間的所有彩蛋後停在左/右邊的最大收集價值。當我們擴大遍歷到的區間的時候,已經被收集的彩蛋價值不改變,減少還未被收集到的彩蛋的價值。因為未被收集的彩蛋也是個連續的區間,所以我們用字首和陣列處理一下,就可以進行o(1)的查詢了。然後收集完乙個區間都可以看作是上乙個區間的擴充套件,而收集完乙個區間只能停在左邊或者右邊上,到達下乙個點的時間就是兩點之間距離。
#include
using
namespace std;
struct node
}a[1010];
int n,x0;
int sum[
1010];
int dp[
1010][
1010][
2];int
main()
for(
int l =
2;l<=n;l++)}
// for(int i = 1;i<=n;i++)
// putchar('\n');
// }
printf
("%.3lf\n"
,max
(dp[1]
[n][0]
,dp[1]
[n][1]
)/1000.0);
return0;
}
塗色PAINT 牛客(區間dp,基礎)
假設你有一條長度為5的木版,初始時沒有塗過任何顏色。你希望把它的5個單位長度分別塗上紅 綠 藍 綠 紅色,用乙個長度為5的字串表示這個目標 rgbgr。每次你可以把一段連續的木版塗成乙個給定的顏色,後塗的顏色覆蓋先塗的顏色。例如第一次把木版塗成rrrrr,第二次塗成rgggr,第三次塗成rgbgr,...
SDOI2008 Sue的小球 題解
給了 n 個小球,第 i 個小球在 x i 初始分值為 y i 同時它會以 dfrac texttt 的速度降低。可以降低為負數 從初始位置開始,每個單位時間可以移動 1 單位長度。收集小球不需要時間,求收集所有小球後能獲得的最大分值。首先,可以想到對每個球按位置從小到大排序。由於總的得分固定,我們...
牛客 CCA的區間 dp 補集轉移
傳送門 首先翻轉乙個區間意味著可以將任意兩段不相交的區間組合,所以問題變成了選兩端不相交的區間,使得合併後區間和最大。那麼我們就處理出來區間,讓後進行轉移即可。設d p i dp i dp i 表示i ii的二進位制子集中的最大值,答案就是i d p ix orba se i dp i xor ba...