1005 k次取反後最大化的陣列和

2021-10-16 01:11:54 字數 715 閱讀 4516

貪心:

如果陣列有負元素的話,自然優先把負變為正,且最優先的是最小負值(即絕對值最大的元素);

如果陣列所有元素都為正了,k仍沒用完,就全用在尾元素上:為了最大限度的減小損失,應該優先把最小正值變為負,同樣如果變了一次之後尾元素變為負,如果k還沒用完那自然應該把尾元素變回正,因此應該把剩餘的k全用在尾元素上;

//稍微簡潔一點的寫法

class

solution);

//按絕對值從大到小排序

for(

int i =

0; i < a.

size()

;++i)

}int res =0;

for(

int i =

0; i < a.

size()

-1;++i)

return res +

=(k %2)

?-1* a.

back()

: a.

back()

;//尾元素最終是多少,其實取決於k剩餘多少,因為剩下的k要全用在尾元素上}}

;

本題貪心在:想讓陣列和最大,有負就先把負變正(且先變絕對值最大的負數),沒負就把最小的整數變負減小損失;

lambda的寫法,把陣列元素實現按絕對值排序

本題-100 <= a[i] <= 100,可以不使用快排sort,換用桶排序(日後補)

Leetcode1005K 次取反後最大化的陣列和

思路 使總和最大,最大應該是再需要操作的次數k條件下 負數變為正數符號不變。負數數目n neg 正數數目n pos。負數提取形成乙個序列s1 正數乙個序列 正數序列求和s2 k a 負數從小到大排序,排在前面絕對值反而大 s1 前k個絕對值求和 k 1 最後 直接求和 k a 負數序列取絕對值求和s...

P1005 矩陣取數

看完題可能第一時間並沒有清晰的思路。讓我們一步一步的來考慮這道題目。題目中描述操作為每次從所有的行中選取,這樣做有些麻煩。仔細思考一下可以發現行與行之間互不干涉,所以我們可以對每行操作到底,最後統計答案。每行怎麼選取當然難不倒聰明的oier了,設f i j 表示某行從第i位到第j位的最優答案。轉移如...

luoguP1005矩陣取數遊戲

題目描述 帥帥經常跟同學玩乙個矩陣取數遊戲 對於乙個給定的nm的矩陣,矩陣中的每個元素aij均為非負整數。遊戲規則如下 1.每次取數時須從每行各取走乙個元素,共n個。m次後取完矩陣所有元素 2.每次取走的各個元素只能是該元素所在行的行首或行尾 3.每次取數都有乙個得分值,為每行取數的得分之和,每行取...