最長非遞減子串行的應用

2021-07-17 03:46:08 字數 1098 閱讀 6788

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

2

21 10

32 5 4

sample output

case #1:

0case #2:

1

給乙個序列a , 最少改變多少元素使得其變為單調遞增序列

對於這個序列,更換的最少就是找乙個最長的不需要更換的子串行

所以就是求a[i] - i的最長非遞減序列

for example:

1 4 8 2 3 4 5 9 10

如果求這個序列的最長遞增子串行長度之後在n-len,明顯是錯誤的,會是2

但是答案應該是3

#include#include#include#include#include#include#include#define inf 0x3f3f3f3f

#define ll long long

using namespace std;

int ans[100010];

int find(int l,int r,int k)

return l;

}int main()

int minx=find(1,len,x-i);

ans[minx]=x-i;

if(minx>len)

len++;

}cout<<"case #"<

最長遞減子串行

最長遞增子串行算過很多了?那我們這次來求個遞減的試試 第一行為乙個整數t,代表有t組測試資料。每組測試資料為乙個只含有字母和數字的字串 字串長度不超過1000 對於每組測試資料,輸出其最長遞減子串行的長度 要求以ascii碼進行比較且嚴格遞減 程式源 include using namespace ...

最長遞減子串行

最長遞減子串行 如果array i aarray j 第i個數的最長遞減子串行的長度 等於 i 1到最後乙個數的最長遞減子串行的長度 加 1 否則 最長遞減子串行的長度就是1 最後乙個數的最長遞減子串行的長度等於1,最開始的時候dp i 的值都為1 然後倒著求最長遞減子串行 如 3,8,7,5,4,...

hunnu 11182 最長非遞減子串行

xujie賣車 time limit 1000ms,special time limit 2500ms,memory limit 32768kb total submit users 1,accepted users 1 problem 11182 no special judgement prob...