演算法期中 最小和

2021-08-13 03:03:46 字數 842 閱讀 4953

從數列a[0], a[1], a[2], …, a[n-1]中選若干個數,要求對於每個i(0<=i < n-1),a[i]和a[i+1]至少選乙個數,求能選出的最小和.

1 <= n <= 100000, 1 <= a[i] <= 1000

請為下面的solution類實現解決上述問題的函式minsum,函式引數a是給出的數列,返回值為所求的最小和.

例1:a = ,答案為4.

例2:a = ,答案為5.

當陣列只有乙個元素時,直接返回第乙個元素;

當陣列有兩個元素,返回最下的乙個;

陣列有三個或以上元素時,設定陣列s,若序號為i,則s[i]表示以陣列第i個元素結尾的最小和。

對於數列 123

456 設

s[0] = a[0];

s[1] = a[1];

s[2]為以3結尾的最小和,很明顯,序列要麼是 1

3 要麼是 2

3同理,s[3]是以4結尾的最小和,序列選擇有:12

4134

2342

4顯然,2

4 是最小和序列

由於題目規則,在第 i、i+1個元素中,必須選擇乙個,所以,在算第i個元素結尾的最小和時,i-1、i-2中的乙個元素必須被選擇,所以第i個元素的最小和等於以i-1或i-2結尾的元素的最小和加上本身。存在以下規律

s[i] = min(s[i-2] + a[2] + s[i-1] + a[2]) i >= 3

class solution 

return min(s[a.size()-1, a.size()-2]);

}};

演算法期中1005 最小和

description 從數列a 0 a 1 a 2 a n 1 中選若干個數,要求對於每個,i i 0,i n 1 a i 和a i 1 至少選乙個數,求能選出的最小和.1 n 100000,1 a i 1000 請為下面的solution類實現解決上述問題的函式minsum,函式引數a是給出的數...

演算法期中 最長公共子串

description 給定兩個字串x x 1x 2 x n和y y 1y 2 ym,請找出x和y的最長公共子串的長度,也就是求出乙個最大的k,使得存在下標i和j有x ix i 1 x i k 1 yjy j 1 y j k 1.x和y只含有小寫字母,長度均在1和1000之間.請為下面的soluti...

演算法期中練習 1001 最小差

description 對於乙個整數數列a 0 a 1 a n 1 要求在其中找兩個數,使得它們的差的絕對值最小.2 n 100,1000 a i 1000.example 例1 當a 返回4.例2 當a 返回0.請實現下面solution類中計算mindifference a 的函式,返回值為能得...