愛奇藝 筆試刷題

2021-08-21 13:49:14 字數 1174 閱讀 1040

題目描述:

/**

牛牛學習了氣泡排序,並寫下以下氣泡排序的偽**,注意牛牛排序的陣列a是從下標0開始的。

bubblesort(a):

repeat length(a)-1 times:

for every i from 0 to length(a) - 2:

if a[i] > a[i+1] then:

swap a[i] and a[i+1]

牛牛現在要使用上述演算法對乙個陣列a排序。

在排序前牛牛允許執行最多k次特定操作(可以不使用完),

每次特定操作選擇乙個連續子陣列,然後對其進行翻轉,

並且k次特定操作選擇的子陣列不相交。

例如a = , k = 1,

如果牛牛選擇的子陣列是[2,4](注意下標從0開始),

那麼翻轉之後的陣列變為a = 。

牛牛知道氣泡排序的效率一定程度上取決於swap操作次數,

牛牛想知道對於乙個陣列a在進行k次特定操作之後,

再進行上述氣泡排序最少的swap操作次數是多少?

輸入描述:

輸入包括兩行,

第一行包括兩個正整數n和k(2 ≤ n ≤ 50, 1 ≤ k ≤ 50),表示陣列的長度和允許最多的特定操作次數。

第二行n個正整數a[i](1 ≤ a[i] ≤ 1000),表示陣列內的元素,以空格分割。

輸出描述:

輸出乙個整數,表示在執行最多k次特定操作之後,對陣列進行上述氣泡排序需要的swap操作次數。

輸入例子1:

3 22 3 1

輸出例子1:

1*/

思路如下:

dp[i][k]表示0-i這一段操作k次以內

操作後陣列0-i裡面得到最少的逆序數

具體更新見**

o(n*k*n)

**如下:

#include #include#include #include using namespace std;

const int maxn=55;

int getcnt(vectora,int x)

int n,dp[maxn][maxn],k,k,i,j;

int main()}}

printf("%d",dp[0][k]);

}

愛奇藝 筆試刷題

題目描述 牛牛和羊羊非常無聊.他們有n m個共同朋友,他們中有n個是無聊的,m個是不無聊的。每個小時牛牛和羊羊隨機選擇兩個不同的朋友a和b.如果存在多種可能的pair a,b 任意乙個被選到的概率相同。然後牛牛會和朋友a進行交談,羊羊會和朋友b進行交談。在交談之後,如果被選擇的朋友之前不是無聊會變得...

愛奇藝 筆試刷題

題目描述 乙個完整的括號字串定義規則如下 1 空字串是完整的。2 如果s是完整的字串,那麼 s 也是完整的。3 如果s和t是完整的字串,將它們連線起來形成的st也是完整的。例如,和 是完整的括號字串,和 是不完整的括號字串。牛牛有乙個括號字串s,現在需要在其中任意位置盡量少地新增括號,將其轉化為乙個...

愛奇藝 筆試刷題

題目描述 牛牛選擇了乙個正整數x,然後把它寫在黑板上。然後每一天他會擦掉當前數字的最後一位,直到他擦掉所有數字。在整個過程中,牛牛會把所有在黑板上出現過的數字記錄下來,然後求出他們的總和sum.例如x 509,在黑板上出現過的數字依次是509,50,5,他們的和就是564.牛牛現在給出乙個sum,牛...