迎春舞會之三人組舞 dp

2021-09-08 20:06:28 字數 1299 閱讀 6003

題目鏈結

初看此題,難免想起這道題目

但仔細想想,發現中間那個人的標記會很難搞

於是便有了如下思路

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...