給定乙個長度為 \(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....