題目
找出數列中不連續的最大的k區間 和第二大的k區間
,這樣的貪心思想是錯誤的。
例如7 3
5 6 6 8 10 12 7
不連續的第一大3區間 和第二大分別為(8 10 12) 和(5 6 6),這樣計算答案為47.實際上應該選(6 6 8)和(10 12 7) 答案為49
以i為分界線,i的左邊包括i的最大k區間加上i的右邊不包括i的k區間,迴圈不斷更新最大值
#include
using
namespace std;
const
int maxn =
2e5+9;
typedef
long
long ll;
ll a[maxn]
;int
main()
ll max =
-1e18
; ll ans =
-1e18
;for
(int i=k;i+k<=n;i++
) cout<}return0;
}
以i為分界線,乙個迴圈left[i]記錄i左邊的最大k區間,再乙個迴圈right[i]記錄i右邊的最大k區間。再乙個迴圈left[i]+right[i]更新最大值
#include
using
namespace std;
const
int maxn =
2e5+9;
typedef
long
long ll;
ll a[maxn]
;ll left[maxn]
;ll right[maxn]
;int
main()
left[k]
= a[k]
- a[0]
; right[n-k]
= a[n]
- a[n-k]
;for
(int i=k+
1;i+k<=n;i++
)for
(int i=n-k-
1;i>=
1;i--
) ll ans =
-1e18
;for
(int i=k;i+k<=n;i++
) cout<}return0;
}
數學考試(字首和)
今天qwb要參加乙個數學考試,這套試卷一共有n道題,每道題qwb能獲得的分數為ai,qwb並不打算把這些題全做完,他想選總共2k道題來做,並且期望他能獲得的分數盡可能的大,他準備選2個不連續的長度為k的區間,即 l,l 1,l 2,l k 1 r,r 1,r 2,r k 1 r l k 第一行乙個整...
數學考試 字首和(尺取)
今天qwb要參加乙個數學考試,這套試卷一共有n道題,每道題qwb能獲得的分數為ai,qwb並不打算把這些題全做完,他想選總共2k道題來做,並且期望他能獲得的分數盡可能的大,他準備選2個不連續的長度為k的區間,即 l,l 1,l 2,l k 1 r,r 1,r 2,r k 1 r l k 第一行乙個整...
數學考試dp
來自 先是read 函式,用於快速讀入,比cin快,比printf快 int read ch getchar while ch 0 ch 9 return x f 呼叫函式的時候定義乙個新變數 比如輸入乙個t,表示測試次數 int t t read 接下來是看題幹,兩個不連續的區間 區間長度為k i...