CSU 1729 齒輪傳動

2021-08-08 13:27:10 字數 1141 閱讀 3510

time limit: 1 sec memory limit: 128 mb submitted: 204 solved: 97你在一家機械廠打工,你的老闆讓你把一組齒輪種類序列a1,a2,..,an取走幾個讓齒輪的傳動比為1:1,老闆要求你取走最少的齒輪,不能改變齒輪原來的相對位置,滿足條件,即齒輪種類組合起來是回文串。

多組資料,第一行有乙個整數t , 表示有t組資料。(t<=100)

以下每組資料第一行有乙個整數n , 表示n個齒輪(1<=n<=1000)

接下來一行有n個整數a1,a2,…,an表示齒輪種類 (1<=ai<=10000)

取走的最少齒輪數

1 4

1 2 3 1

思路:有兩種方法可以求解,一種是先求出最長回文子串行,然後數字總個數-最長回文子串行就是要求的答案,其中最長回文子串行可以就是乙個模板題;還有一種直接dp,設f[i][j]表示區間[i,j]需要刪除的數字個數,那麼顯然可以得到狀態轉移方程:①a[i]==a[j],f[i][j]=f[i+1][j-1],②a[i]!=a[j],f[i][j]=min(f[i+1][j],f[i][j-1])+1。其中i要從後往前列舉,j要從前往後列舉,因為這樣才能保證後面的狀態可以由前面的狀態推出。

方法一:

#include

#include

#include

using

namespace

std;

const

int maxn =1005;

int a[maxn],f[maxn][maxn];

int main()

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

}return

0;}

方法二:

#include

#include

#include

using

namespace

std;

const

int maxn =1005;

int a[maxn],f[maxn][maxn];

int main()

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

}return

0;}

172 完美距離

聽說這題只用普通的線段樹就可以了,但我卻用了線段樹合併。也許蒟蒻對概念並不夠了解。注意n要定義為200000,因為環的處理要佔兩倍記憶體。考試的時候沒想清楚,一開始只得了三十分,後來悄悄看了成績後直接把n開到1000000把它a掉。事後直到現在才明白當時為毛re。如下 include include...

172 立體推箱子

此題是一道比較明顯但又麻煩的廣搜題,經典的走迷宮求最少步驟的題 由於這個題的狀態有些麻煩,我們建立乙個三元組結構體 x,y,li e x,y,lie x,y,l ie x,y x,yx,y表示座標,lie lieli e表示現在是立著的還是橫著躺或是豎著躺 l ie 0 lie 0 lie 0,表示...

CLRS 17 2核算法

17.2 1 每個 k 次push或pop執行一次copy,那麼使push和pop的 co st為 2 1份用來支付本身的操作,另 1 份用於copy。17.2 2 每次操作的代價都是 3,當 i 不是 2的冪時,支付一美元,信用為 2 美元 否則就支付 i美元,使用信用支付。由於攤還代價是 3 美...