題目描述:
/**
牛牛學習了氣泡排序,並寫下以下氣泡排序的偽**,注意牛牛排序的陣列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,牛...