可模擬可貪心
首先,我們能想到,既然要和為奇數,那麼必然是奇數個奇數相加,偶數隨意!(qaq… 這點比賽考慮到位了!
其次必然要剪枝一下,或者再貪一下,(這個,比賽的時候我沒考慮到位,超時n發,原因是我做了重複的相加操作,這裡我沒用字首和優化一下即可
然後我們可以再貪一下,標記下,偶數哪一段從**開始就變負數了,對於負數我們可以直接拋棄掉!(當然奇數也可以這樣貪一下,但是可能還得考慮再仔細一點!
到此為止,貪的也差不多了,優化的也差不多了!剛好夠ac(hahahaha
對了還有最後一點,這題寫了最多可以取k個,不是就取k個,這個我到比賽結束都沒發現這個問題(qaq…
#include
using
namespace std;
const
int maxn =
100005
;const
long
long inf =
1e16+7
;bool
cmp(
long
long a,
long
long b)
typedef
long
long ll;
ll anum[maxn]
, bnum[maxn]
;int
main()
sort
(anum, anum + aa, cmp)
;sort
(bnum, bnum + bb, cmp)
;int tmpa = aa, tmpb = bb;
// 求一下字首和
for(
int i =
1; i < aa; i++
)// 這裡我們貪一下,出現負數的直接丟了
for(
int i =
1; i < bb; i++
) bnum[i]
+= bnum[i -1]
;}// 如果第乙個偶數就為負數,那麼偶數就沒必要加了
if(bnum[0]
<
0) tmpb =0;
long
long ans = anum[0]
;for
(int i =
1; i <= m && i <= tmpa; i +=2
)else
}else
ans =
max(ans, tmp);}
cout << ans << endl;
}return0;
}
HAUTOJ奇數最大子段和
題目描述 乙個大小為n的陣列a1到an 10 4 ai 10 4 請你找出乙個連續子段,使子段長度為奇數,且子段和最大。輸入 第一行為t 1 t 5 代表資料組數。之後每組資料,第一行為n 1 n 10 5 代表陣列長度。之後一行n個數,代表a1到an。輸出 每組資料輸出一行,表示滿足要求的子段和最...
連續奇數和
題目 小明看到一本書上寫著 任何數字的立方都可以表示為連續奇數的和。比如 2 3 8 3 5 3 3 27 7 9 11 4 3 64 1 3 15 copy 雖然他沒有想出怎麼證明,但他想通過計算機進行驗證。請你幫助小明寫出 111 的立方之連續奇數和表示法的起始數字。如果有多個表示方案,選擇起始...
藍橋 連續奇數和
小明看到一本書上寫著 任何數字的立方都可以表示為連續奇數的和。比如 2 3 8 3 5 3 3 27 7 9 11 4 3 64 1 3 15雖然他沒有想出怎麼證明,但他想通過計算機進行驗證。請你幫助小明寫出 111 的立方之連續奇數和表示法的起始數字。如果有多個表示方案,選擇起始數字小的方案。請嚴...