時間限制:4 sec
空間限制:256 mb
有乙隻奶牛在一條筆直的道路上(可以看做是乙個數軸)。初始,它在道路上座標為 k 的地方。
這條道路上有 n 棵非常新鮮的青草(編號從 1 開始)。其中第 i 棵青草位於道路上座標為 x[i] 的地方。貝西每秒鐘可以沿著道路的方向向前(座標加)或向後(座標減)移動乙個座標單位的距離。
它只要移動到青草所在的地方,就可以一口吞掉青草,它的食速很快,吃草的時間可以不計。
它要吃光所有的青草。不過,青草太新鮮了,在被吞掉之前,暴露在道路上的每棵青草每秒種都會損失一單位的口感。
請你幫它計算,該怎樣來回跑動,才能在口感損失之和最小的情況下吃掉所有的青草。
第一行兩個用空格隔開的整數 n,k,分別表示青草的數目和奶牛的初始座標。
第 2 行到第 n+1 行,第 i+1 行有乙個整數 x[i],描述第 i 棵青草的座標。
一行乙個整數,表示吃掉所有青草的前提下,最小損失的口感之和。保證答案在 32 位有符號整數的範圍內。
4 1019
1119
44
先跑到 9,然後跑到 11,再跑到 19,最後到 1,可以讓損失的口感總和為 29+1+3+11=44。可以證明不存在比這更優的解。
對於 50% 的資料,保證 1≤n≤4,1≤k,x[i]≤20。 對於 80% 的資料,保證 1≤n≤100。 對於 100% 的資料,保證 1≤n≤1000,1≤k,x[i]≤10^6。
[我們先從另乙個角度看答案,即損失的總口感:從初始狀態到奶牛吃掉第 1 棵草之間的時間(我們在下面把它叫做第 1 段時間),所有的 n 棵青草都在流失口感;……;從奶牛吃掉第 i 棵草到它吃掉第 i+1 棵草之間的時間(我們在下面把它叫做第 i+1 段時間),還沒有被吃掉的 n-i 棵草都在流失口感;……]
[於是我們發現,第 i 段時間對答案的貢獻,為這段時間的長度與 n-i+1 的乘積。]
[接著,我們再來關注最優策略。吃完一棵草後(包括初始時),奶牛的最優策略一定是直奔另一棵草。]
[由於奶牛不會飛,所以奶牛走過的所有路一定是一段連續的區間。]
[顯然地,被奶牛經過過的地方,按最優策略,一定不會留下青草。]
[所以我們可以**將所有青草的座標排序**(下面我們都使用排完序後的編號),然後用 dp[l][r][j] 表示吃完 [l,r] 範圍內的青草時的最小答案,j 只有 0,1 兩種取值,分別表示奶牛吃完最後一棵草停在青草 l 還是 r 上(只有可能是這兩種情況,否則與上面的結論矛盾)。]
[於是我們就可以輕易地設計出狀態轉移方程:]
[dp[l][r][0]=min(dp[l+1][r][0]+(n-r+l)*abs(x[l]-x[l+1]),dp[l+1][r][1]+(n-r+l)*abs(x[l]-x[r]))]
[dp[l][r][1]=min(dp[l][r-1][1]+(n-r+l)*abs(x[r]-x[r-1]),dp[l][r-1][0]+(n-r+l)*abs(x[r]-x[l]))]
[邊界為:dp[i][i][j]=abs(x[i]-k)*n(對於所有1<=i<=n,j=0,1)]
另外,為了幫助大家完成題目,我們提供了只包含了輸入輸出功能的程式模板,也提供了含有演算法的大部分實現細節的程式。
你可以根據自己的實際情況,在這些程式的基礎上進行作答,或不參考這些程式,這將與你的得分無關。
這些程式可以從【這裡[來自 usaco 月賽(具體場次已無從考究)]
集訓第三週
又要感嘆時間過得真快了,8月13號,距離第一場網路賽還有26天。暑假三周集訓結束,個人賽也結束了,這一周還是做了一些個人賽,然後組好了隊伍。去年一隊有2個人算是 實力超群 比其餘人都高乙個檔次。而今年大家的水平都差不多,沒有像去年他們那麼突出,實力自然有不小的下降。相比去年的隊伍,今年隊的特點是大家...
第三週作業
實驗作業 1.輸入課本各個例題,除錯執行程式,並分析程式,將每乙個程式改寫2到3個版本,自己分析程式結果,然後再除錯執行,核對分析結果的對錯。2.編寫程式輸入乙個三角形的三條邊,計算其面積和周長 3.編寫程式計算並輸出課本本章習題3表示式的值並分析結果。4.編寫乙個程式,輸入乙個一元二次方程的三個係...
第三週作業
要求 1.輸入課本各個例題,除錯執行程式,並分析程式,將每乙個程式改寫2到3個版本,自己分析程式結果,然後再除錯執行,核對分析結果的對錯。2.編寫程式輸入乙個三角形的三條邊,計算其面積和周長 3.編寫程式計算並輸出課本本章習題3表示式的值並分析結果。4.編寫乙個程式,輸入乙個一元二次方程的三個係數,...