lin原題在atck\frak
link
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...