題目鏈結
初看此題,難免想起這道題目
但仔細想想,發現中間那個人的標記會很難搞
於是便有了如下思路
dp[i]
[j]表示在前i個人中分成j組的最小殘疾程度
便有如下狀態轉移方程
dp[i]
[j]=
min(dp[i-1]
[j],dp[i-2]
[j-1]+
(num[i]
-num[i-1]
)^2)
但有以下要點
當i - 1 >= j * 3
時
dp[i-1]
[j]
才合法
但中間那個怎麼確定前 i 個中一定存在乙個沒用過且比方程中的
num[i]
&&num[i-
1]
高呢?
就有如下技巧
讀入時
for
(i =
1;i <= n;i++
)read
(num[n - i +1]
);
題目說了保證公升序
這樣讀入保證了降序
迴圈時
for
(i =
3;i <= n;i++
)}
#include
#include
#include
#define m(x) (x) * (x)
using
namespace std;
const
int maxn =
5001
;template
<
typename t>
inline
void
read
(t &x)
while
(a >=
'0'&&a <=
'9')
if(f) x *=-
1;}template
<
typename t>
inline t min
(t a,t b)
int num[maxn]
;int dp[maxn]
[1001];
intmain()
}printf
("%d"
,dp[n]
[m])
;}
迎春舞會之三人組舞 版本2 題解
題目描述 hnsdfz的同學們為了慶祝春節,準備排練一場舞 n個人選出3 m 3 times m 3 m人,排成m組,每組3人。站的隊形 較矮的2個人站兩側,最高的站中間。從對稱學角度來欣賞,左右兩個人的身高越接近,則這一組的 殘疾程度 越低。計算公式為 h a b 2h a b 2 h a b 2...
演算法3(low B三人組)
首先,列表每兩個相鄰的數,如果前邊的比後邊的大,那麼交換這兩個數 時間複雜度 o n2 def bubble sort lis 氣泡排序 param lis 無序列表 return 有序的從小到大的列表 for i in range 0,len lis 1 可能存在列表已經排好的情況,加標記 exc...
排序演算法之low B三人組
列表排序 將無序列表變成有充列表 應用場景 各種榜單,各種 給二分法排序使用,給其他演算法使用 輸入無序列表,輸出有序列表 公升序或降序 排序low b三人組 首先,列表每兩個相鄰的數做比較,如果前邊的數比後邊的數大,那麼交換這兩個數 def bubble sort l1 for i in rang...