牛客OI周賽3 提高組B 1408 dp

2021-08-29 14:06:44 字數 1673 閱讀 1783

lin

k\frak

link

原題在atc

oder

\frak

atcode

r上下面有一大段廢話。

其實這道題挺簡單的

有兩種東西混一起的題目已經有不少了,不過我還是沒想出來

主要是根本沒有往d

p\frak

dp上面想,看見排序題就想著怎麼貪心了(

有一類題形如通過交換使序列有序的

最基本的問題是交換相鄰兩個數字/任意兩個數字使序列有序求最少交換次數

兩道經典題目:花匠、花火

交換區間使序列有序這種沒找到題目

交換相鄰兩數使區間有序

交換任意兩數使區間有序(也沒找到)

(第二個基本問題(交換任意兩個數使序列有序),答案是數的個數減掉輪換數)

(這裡的輪換數是指,把每個數跟它在有序序列裡的位置連個線,成環的個數)

其中第乙個基本問題的答案是逆序對個數。

實際上並不一定要是標準定義的「逆序對」——「逆序」的定義其實可以過載

比如可以推廣為「排序前a

\frak

a在b\frak

b前面→排序後a

\frak

a在b\frak

b後面」的a

\frak

a和b\frak

b那麼這道題目答案就是逆序對個數。現在不確定的就是目標狀態。

這題本質上就是求移動到最優解的最少步數。

混色題目很多了,應該要很容易想到黑白球分兩維的d

p\frak

dp。記fi,

j\frak}

fi,j

​為使(前i

\frak

i個白球有序,前j

\frak

j個黑球有序)的最小代價。現在看起來轉移方程挺顯然的。

轉移考慮當前這個位置放黑球j

\frak

j還是白球i

\frak

i, fi,

j=mi

n\frak=min\+inv1_,f_+inv2_\}}

fi,j​=

mininv

1/2i

,j

\frak}

inv1/2

i,j​

表示第 i

ii 個白/黑球與( 1∼i

−1

\frak

1∼i−

1 的白/黑球及 1∼j

\frak

1∼j 的黑/白球)產生的逆序對數

因為要移回去啊。

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace std;

int n,pos[2]

[4005]=

,cost[2]

[2005][

2005]=

;int f[

2005][

2005]=

;char ch;

intmain()

牛客OI周賽5 提高組 B 可愛 星空

嘻嘻嘻 當你看向她時,有細碎星辰落入你的眼睛,真好。小可愛 在乙個繁星閃爍的夜晚,卿念和清宇一起躺在郊外的草地上,仰望星空。星語心願,他們,想把這片星空的星星,連成一棵漂亮的樹,將這美好的景色記錄下來。現在,天上共有n顆星星,編號分別為1,2.n,一開始任何兩個點之間都沒有邊連線。之後,他們兩個想在...

牛客OI周賽9 普及組

目錄a題 b題 c題 小q挺喜歡擼串的,沒錯,字串!你給小q送上了n個字串 對於乙個字串s,如果在小q擼掉 刪除 任意個字元之後,nowcoder 是其子串,則這個字串s是可擼的。小q最近切題切到手軟,想擼串散散心。如果你給他呈現的字串是可擼的,他會很開心,否則他會很桑心。輸入描述 乙個整數n,表示...

牛客OI周賽14 普及組

菜的真實,普及都 ak 不掉.score 100 100 100 0 300 rank 16 看來 pj t1 考字串讀入成鐵上釘釘了?考慮開桶 a 記錄 ascii 為 i 的字元是否出現即可。includeusing namespace std typedef long long ll cons...