調整隊形 TJOI2007

2022-05-03 16:21:10 字數 910 閱讀 1252

給定乙個初始的序列以及四種操作,問最少操作多少次可以是序列變為回文序列。

操作如下:

在隊伍左側或右側新增乙個數

在隊伍中插入乙個數

刪除乙個數

改變乙個數的值

看到給定的序列和改數的操作(其實還是因為詢問是最少操作次數),可以想到區間dp。

設子狀態\(dp[i][j]\)表示將區間\([i,j]\)變為回文序列的最少操作次數。

由於是區間dp,所以2號操作等價於1號操作,而3號操作等價於刪除左側或右側的數。

有乙個簡單的性質:1號操作和3號操作也是等價的。

這個正確性不難證明:由於新增數和刪除數都是為了將沒有配對的數配對,所以在效果上是完全一樣的。

於是我們只用考慮兩種操作:

新增/刪除數

改變量值

對於第一種操作,狀態轉移方程為

\[f[i][j]=min(f[i][j],min(f[i+1][j],f[i][j-1])+1)

\]對於第二種操作,狀態轉移方程為

\[f[i][j]=min(f[i][j],f[i+1][j-1]+1)

\]注意當左右端點值相等的時候需要特判長度,長度不為2則初始化去掉兩端點,若為2則初始化為0。(最後這個點坑了我10分)

#include using namespace std;

namespace standardio

templateinline void write (t x)

}using namespace standardio;

namespace project

for (register int len=2; len<=n; ++len)

} write(dp[1][n]); }

}int main ()

luogu3847 tjoi2007 調整隊形

題目背景 學校藝術節上,規定合唱隊要參加比賽,各個隊員的衣服顏色不能很混亂 合唱隊員應排成一橫排,且衣服顏色必須是左右對稱的。例如 紅藍綠藍紅 或 紅藍綠綠藍紅 都是符合的,而 紅藍綠紅 或 藍綠藍紅 就不符合要求。合唱隊人數自然很多,僅現有的同學就可能會有3000個。老師希望將合唱隊調整得符合要求...

演算法調整隊形

來自 2017 年網易春招筆試題三 在幼兒園有 n個小朋友排列為乙個隊伍,從左到右乙個挨著乙個編號為 0 n 1 其中有一些是男生,有一些是女生,男生用 b 表示,女生用 g 表示。小朋友們都很頑皮,當乙個男生挨著的是女生的時候就會發生矛盾。作為幼兒園的老師,你需要讓男生挨著女生或者女生挨著男生的情...

TJOI2007 可愛的質數

題目 用一道板子題來複習一下 bsgs bsgs 用於求解形如 a x equiv b mod p 這樣的高次不定方程 由於費馬小定理的存在,我們可是直接暴力掃一遍 p 由於 p 1 次之後肯定會有迴圈節出現,所以 o p 時間內就可以出解 bsgs 本質上就是一種分塊了 設 m ceil sqrt...