LETTers練習賽第十場 第一題

2022-08-28 09:09:12 字數 1133 閱讀 3029

【題目意思】給你很多個點,這些點滿足

a set of points (xi, yi) that satisfy xi < xj and yi > yj for all i < j.

讓你用一棵樹把所有點連在一齊,樹只能往上跟右生長,求樹的總長度最小

【解題思路】類似石子合併,加上四邊形優化就行了

定義狀態 dp[i,j]表示點i到點j合併在一起的最小花費(樹枝的長度),
狀態轉移方程:dp[i,j]= min(dp[i,k]+dp[k+1,j]+cost(i,j) ) i
cost(i,j)=py[k]-py[j]+px[k+1]-px[i];
當j固定時,cost(i,j)單調遞減函式
我們猜測cost(i,j)滿足四邊形不等式
證明: f(i)=cost(i,j+1)-cost(i,j)=py[j]-py[j+1]是乙個與i無關的多項式,
所以j固定時,f(i)滿足四邊形不等式,得證。
s[i,j]=k;s[i-1,j] <= s[i,j] <= s[i,j+1];

由於決策

s具有單調性

,因此狀態轉移方程可修改為

:

下面是ac**:

#include

using namespace std; 

int dp[1010][1010];

int mm[1010][1010];  

int main()

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

}printf("%d\n",dp[1][n]); 

}return 0; 

}

牛客程式語言練習賽第十場全題解

牛客比賽官網 題目描述 輸入乙個人的出生日期 包括年月日 將該生日中的年 月 日分別輸出。輸入描述 輸入只有一行,出生日期,包括年月日,年月日之間的數字沒有分隔符。輸出描述 三行,第一行為出生年份,第二行為出生月份,第三行為出生日期。輸出時如果月份或天數為1位數,需要在1位數前面補0。示例1輸入 2...

UPC2018組隊訓練賽第十場

直接按照題意寫 1 include 2 3using namespace std 4bool cmp int x,inty 5 8int n,m,a 1005 9 intmain 1025 return0 26 view code 輸入的兩個字串相同輸出 identical 如果只有乙個雙引號裡面的...

牛客程式語言練習賽第一場 C 解題

bobo教kiki字元常量或字元變數表示的字元在記憶體中以ascii碼形式儲存。bobo出了乙個問題給kiki,轉換以下ascii碼為對應字元並輸出他們。73,32,99,97,110,32,100,111,32,105,116 33 無轉換輸出題目中給出的所有ascii到對應的字元。ac incl...