牛客網 牛牛的數列

2021-10-03 07:46:01 字數 900 閱讀 4067

題目描述:

牛牛現在有乙個n個數組成的數列,牛牛現在想取乙個連續的子串行,並且這個子串行還必須得滿足:最多隻改變乙個數,就可以使得這個連續的子串行是乙個嚴格上公升的子串行,牛牛想知道這個連續子串行最長的長度是多少。

一開始看到這個題,總是被繞進「改變乙個數」中,就想說是不是遍歷陣列,然後每個數都嘗試改變,這樣改變後又要遍歷一次。想來這不可行。

其實要用動態規劃的思想。

當要改變某個數i時,其實該數把陣列分為了i之前和i之後,那麼:

定義dp1儲存的是以某數為起始的最長序列,dp2為以某數為結束的最長序列;

定義陣列為a。

邊界:dp1[n-1] = 1,dp2[0] = 1

且若a[i-1]若a[i]得到dp1和dp2之後還要再從頭遍歷一遍陣列  得出maxlen,這時要考慮若改變i那前面和後面能否連起來形成增。

code:(c++)

#include#includeusing namespace std;

int main()

vectordp1(n,0); //kaishi

vectordp2(n,0);

dp1[n-1] = 1;

dp2[0] = 1;

for(int j = n-1;j>0;j--)

else

}int maxlen = 1;

int result = 1;

for(int i = 0;i<=n-1;i++)

else if(i==n-1)

else if(a[i-1]+1result)

}cout《此題的解法其實不在乎將i改變成什麼值,而是它改變之後能否單調遞增。

若a[i-1]加上1之後都比a[i+1]小,則把a[i]變為a[i-1]+1後即可形成單調增。

總結:這是一道值得揣摩的題。

牛牛的數列 牛客網

牛牛現在有乙個n個數組成的數列,牛牛現在想取乙個連續的子串行,並且這個子串行還必須得滿足 最多隻改變乙個數,就可以使得這個連續的子串行是乙個嚴格上公升的子串行,牛牛想知道這個連續子串行最長的長度是多少。輸入包括兩行,第一行包括乙個整數n 1 n 10 5 即數列的長度 第二行n個整數a i,表示數列...

牛客 牛牛的數列

鏈結 牛牛的數列 時間限制 c c 1秒,其他語言2秒 空間限制 c c 32768k,其他語言65536k 64bit io format lld 牛牛現在有乙個n個數組成的數列,牛牛現在想取乙個連續的子串行,並且這個子串行還必須得滿足 最多隻改變乙個數,就可以使得這個連續的子串行是乙個嚴格上公升...

牛客網 牛牛找工作

時間限制 2秒 空間限制 65536k 為了找到自己滿意的工作,牛牛收集了每種工作的難度和報酬。牛牛選工作的標準是在難度不超過自身能力值的情況下,牛牛選擇報酬最高的工作。在牛牛選定了自己的工作後,牛牛的小夥伴們來找牛牛幫忙選工作,牛牛依然使用自己的標 准來幫助小夥伴們。牛牛的小夥伴太多了,於是他只好...