luogu3847 tjoi2007 調整隊形

2021-08-17 17:47:55 字數 1124 閱讀 8143

題目背景

學校藝術節上,規定合唱隊要參加比賽,各個隊員的衣服顏色不能很混亂:合唱隊員應排成一橫排,且衣服顏色必須是左右對稱的。

例如:「紅藍綠藍紅」或「紅藍綠綠藍紅」都是符合的,而「紅藍綠紅」或「藍綠藍紅」就不符合要求。

合唱隊人數自然很多,僅現有的同學就可能會有3000個。老師希望將合唱隊調整得符合要求,但想要調整盡量少,減少麻煩。以下任一動作認為是一次調整:

題目描述

1、在隊伍左或右邊加乙個人(衣服顏色依要求而定);

2、在隊伍中任兩個人中間插入乙個人(衣服顏色依要求而定);

3、剔掉乙個人;

4、讓乙個人換衣服顏色;

老師想知道就目前的隊形最少的調整次數是多少,請你編乙個程式來回答他。

因為加入合唱隊很熱門,你可以認為人數是無限的,即隨時想加乙個人都能找到人。同時衣服顏色也是任意的。

輸入輸出格式

輸入格式:

第一行是乙個整數n(1<=n<=3000)。

第二行是n個整數,從左到右分別表示現有的每個隊員衣服的顏色號,都是1到3000的整數。

輸出格式:

乙個數,即對於輸入佇列,要調整得符合要求,最少的調整次數。

輸入輸出樣例

輸入樣例#1:

5 1 2 2 4 3

輸出樣例#1:

2 這題確實是乙個動態規劃的題目

一開始我的迴圈沒想對,但是由於我們每一次都要利用上一次的狀態所以我們最外層迴圈應該使用長度

f[i][j]表示i到j 滿足條件區間內需要更改的最小值

假如a[i]==a[j]那麼 f[i][j]直接從f[i+1][j-1]的狀態繼承過來

如果不等於那麼f[i][j]=要麼改變乙個人的顏色(f[i+1][j-1]+1),要麼f[i+1]j或者f[i]j-1

#include 

#include

#define n 3300

inline

int min(int x,int y)

return x;

}int a[n],f[n][n],n;

int main()

}printf("%d",f[1][n]);

return

0;}

luogu3877 TJOI2010 打掃房間

題目描述 學校新建了一批宿舍,值日生小a要把所有的空房間都打掃一遍。這些宿舍的布局很奇怪,整個建築物裡所有的房間組成乙個n m的矩陣,每個房間的東南西北四面牆上都有乙個門通向隔壁房間。另外有些房間是堆放雜物的,無需打掃。小a想設計若干條打掃路線,使得恰好進出每個需打掃的房間各一次,而且進出每個房間不...

TJOI2015 Day2解題報告

在一棵n 10 5的樹上要求支援 從a點走到b點,求最大的value j value i 其中i,j是點,i在路徑中出現的位置先於j。將a b路徑上每個點的value加上v。自然可以用樹鏈剖分 lct做。每一段區間存四個數 後減前 型的最大值fmx,前減後 型的最大值bmx 這是由於有時候區間可能會...

Luogu食物鏈做法2

這個題的做法2比做法1好想 以下距離都在 mod 3意義下 到最後所有動物的關係可以用樹表示,d i 表示節點i到當前fa i 的距離,我們規定若d x 1 d y 規定成 1也可以 代表x吃y 那麼如果x y同族,那麼如果規定x當前祖先到y當前距離為的d y d x 這樣x到y祖先距離為d x 到...