序列變換
time limit:1000msmemory limit:32768kb64bit io format:%i64d & %i64u
submit
status
practice
hdu 5256
description
我們有乙個數列a1,a2...an,你現在要求修改數量最少的元素,使得這個數列嚴格遞增。其中無論是修改前還是修改後,每個元素都必須是整數。
請輸出最少需要修改多少個元素。
input
第一行輸入乙個
t (1 \leq t \leq 10)
,表示有多少組資料
每一組資料:
第一行輸入乙個
n (1 \leq n \leq 10^5)
,表示數列的長度
第二行輸入n個數
a_1, a_2, ..., a_n
。
每乙個數列中的元素都是正整數而且不超過
10^6
。
output
對於每組資料,先輸出一行
case #i:
然後輸出最少需要修改多少個元素。
sample input
221 10
32 5 4
sample output
case #1:0case #2:
1
不能直接找a[i]的單調最長子序列,例如1 2 2 3,嚴格單調子串行為3,需改得元素為1,但是實際上需要該兩個元素,所以要判斷a[i]-i的單調最長子序列
#include#includeusing namespace std;#define inf 0x3f3f3f3f
int main()
ans=0;
for(i=1;i<=n;i++)
printf("case #%d:\n%d\n",l++,n-ans);
}return 0;
}
HDU 5256 序列變換
題意 我們有乙個數列a1,a2.an,你現在要求修改數量最少的元素,使得這個數列嚴格遞增。其中無論是修改前還是修改後,每個元素都必須是整數。請輸出最少需要修改多少個元素。思想 第i個位置到第i k個位置可以使當中k 1個相等的數通過變換滿足題意,首先把i位置上的數減去i,消除位置的影響 1 2 4 ...
hdu5256 序列變換 dp LIS
點選開啟鏈結 思路 lis的變形,唯一不同的是條件a i i a j j 1,i j。因為要確保這兩個元素之間能插入i j 1個元素 每個數先減去它的下標,防止下面的情況發生 加入序列是1,2,2,2,3,這樣求上公升子串行是3,也就是要修改2個,但是中間的兩個2,變化範圍又不能超過 1,3 那麼這...
HDU 5256 序列變換 LIS變形
傳送們 5256 他讓求至少可以改變幾個數讓他們單調遞增 我們可以處理一下 讓每乙個數都減去i 這樣在後面求出的最長遞增子串行的每幾個數之間都有相應的空位使他變過來 然後求最長遞增子串行就可以啦 如 4 2 3 3 4 變為2 2 1 1 最長遞增子串行為2,2 或1 1 我們就可以變為2 3 4 ...