GJGHFD的排列 題解 DP

2022-06-18 13:12:13 字數 2014 閱讀 2294

​ 給定乙個長度為 \(n\) 的排列 \(p_1\), \(p_2\), · · · , \(p_n\),你可以做以下兩個操作之一:

​ 1.將 \(p_\) 移到 \(p_1\) 之前,即 \(p_1\), \(p_2\), · · · , \(p_n\)

\(\rightarrow\)

\(p_\), \(p_1\), \(p_2\), · · · , \(p_\), \(p_n\).

​ 2.將 \(p_\) 移到 \(p_n\) 之後,即 \(p_1\), \(p_2\), · · · , \(p_n\)

\(\rightarrow\)

\(p_2\), \(p_3\), · · · ,\(p_\), \(p_n\), \(p_\).

​ 一串連續的 \(1\) 操作稱為一次 \(3\) 操作. 求使得原排列變為 \(1, 2, · · · , n\) 的操作序列中包含的 \(3\) 操作的最小次數.

​ 第一行乙個整數 \(n\),表示排列長度.

​ 接下來一行 \(n\) 個整數,給出這個排列.

​ 一行乙個整數表示答案.

6

2 4 5 1 3 6

2
​ 首先做 \(5\) 次 \(2\) 操作,原排列變為 \(6, 2, 4, 5, 1, 3\);

​ 再做 \(3\) 次 \(1\) 操作,原排列變為 \(4, 5, 1, 6, 2, 3\);

​ 再做 \(4\) 次 \(2\) 操作,原排列變為 \(2, 3, 4, 5, 1, 6\);

​ 最後做 \(3\) 次 \(1\) 操作,原排列變為 \(1, 2, 3, 4, 5, 6\) .

​ 對於\(100\%\)的資料,\(1 \leq n \leq 500\)

​ 時間限制: \(1s\)

​ 空間限制: \(512m\)

​ 我們經過手玩一下操作 \(3\) ,可以發現其實操作 \(3\) 的效果等價於把序列中任意元素取出來,扔到序列中的任意位置(我們可以通過 \(2\) 操作調整)。再思考一下,我們列舉每乙個序列中每乙個位置作為起點,其實就是求最長上公升子串行的長度最大值 \(l\) ,然後答案就是 \(n-l\).(因為考慮操作 \(3\) 的效果就是把無序的元素變得有序,那我們找出最長的有序序列,那麼剩下的就是需要調整的,我們要使調整次數最少,就讓這個最長上公升子串行最長)

​ 那麼這裡採用的方法是樹狀陣列優化dp,單調棧也可以。

​ **如下(馬蜂很醜,不喜勿噴)——

#pragma gcc optimize(2)

#include#define tp template#define ts template#define reg register

#define ri reg int

#define con const

#define ci con int&

#define i inline

#define w while

#define maxn 1005

#define ll long long

using namespace std;

int n,ans=maxn,pos[maxn],maxx[maxn],p[maxn];

inline void add(int x,int y)

inline int ask(int x)

class fileinputoutput

tp inline void read(t& x)

tp inline void write(t x,const char& ch)

inline void flush(void)

#undef tc

#undef pc

}f;int main()ans=min(ans,n-sum);}

f.write(ans,'\n');return f.flush(),0;

}//給定乙個排列,每次可以把乙個數取出插入到另乙個位置,最小操作次數 -> 最長上公升子串行

GJGHFD的傳送門 題解 Floyd DP

給定一張 n 個點 m 條邊的連通圖,圖中每條邊都有乙個非負邊權,點的編號從 1 開始.現在你有 k 個任務,第 i 個任務需要你先到達點 a i 然後到達點 b i 你需要依次完成這 k 個任務.初始時你在 1 號點.現在你手裡有一把槍,當你在 u 號點朝地上開槍時,u 上就會建立乙個傳送門.開槍...

有關排列的dp題目

有乙個長度為 n nn 的排列 a aa,其中有一些位置被替換成了 1。你需要嘗試恢復這個排列,將 1 替換回數字。求有多少種可行的替換方法,滿足得到的是乙個排列,且不存在 ai ia i i ai i 的。n 5000 n leq 5000 n 5000 前置技巧 乙個每行 每列只有乙個棋子的棋盤...

排列計數(dp)

主要題意就是給你乙個排列組合,要輸出指定ai i的個數輸出符合的排列組合與1000000007取模個數。input there are several test cases,and one line for each case,which contains two integers,n and k....