每日一題 30 手套 數學 模擬 貪心法

2021-09-28 17:18:43 字數 1574 閱讀 2121

在地下室裡放著n種顏色的手套,手套分左右手,但是每種顏色的左右手手套個數不一定相同。a先生現在要出門,所以他要去地下室選手套。但是昏暗的燈光讓他無法分辨手套的顏色,只能分辨出左右手。所以他會多拿一些手套,然後選出一雙顏色相同的左右手手套。現在的問題是,他至少要拿多少只手套(左手加右手),才能保證一定能選出一雙顏色相同的手套。

給定顏色種數n(1≤n≤13),同時給定兩個長度為n的陣列left,right,分別代表每種顏色左右手手套的數量。資料保證左右的手套總數均不超過26,且一定存在至少一種合法方案。

輸入描述:

4,[0,7,1,6],[1,5,0,6]

輸出描述:

返回:10(解釋:可以左手手套取2只,右手手套取8只)

本題的意思是隨意取出的手套至少可以形成一組組合的最少手套數量。題目給的兩個陣列對應位置表示同一種顏色的 左右手套數量。

對於非0遞增序列(a

1a_1

a1​< a

2a_2

a2​ < a

3a_3

a3​ < … < a

na_n

an​)如何覆蓋每乙個種類呢?

舉乙個小例子:在2 3 4 5的序列中任意找三個數求和,保證沒有其他的三個數的和大於它,你肯定會選擇3,4,5;那如果需要找乙個整數比其中任意三個數的和都大,且為最小的乙個,應該怎麼選?

答案為:((2 + 3 + 4 + 5)- 2)+ 1 即可保證序列中任取三個數不可能比它大,且為符合條件 的最小值。

覆蓋(a1,a2,…an)的數為(sum(a1,

a2,.

..,a

na_1,a_2,...,a_n

a1​,a2

​,..

.,an

​) - a

1a_1

a1​) + 1;// a

1a_1

a1​的值為最小值

對於非0遞增序列a1,

a2,.

..,a

na_1,a_2,...,a_n

a1​,a2

​,..

.,an

​,要想最終取值覆蓋每乙個種類 n=sum(a1.

..an

a_1...a_n

a1​...

an​)-a1+

1a_1+1

a1​+

1(也就是總數減去最小值之後加一) 同理對於左右手手套顏色都有數量的序列,想要覆蓋每一種顏色,則最小數量leftsum = 左邊數量和 - 左邊最小值+1,rightsum=右邊數量和 - 右邊的最小值 +1。而對於有0存在的,則需要做累加,保證覆蓋每一種顏色。

class

gloves

}// 結果為有左右都有數量的手套序列的結果+有0存在的手套數+1,即能夠保證

return sum +

min(leftsum - leftmin +

1, rightsum - rightmin +1)

+1;}

};

每日一題 37 汽水瓶 數學 模擬

有這樣一道智力題 某商店規定 三個空汽水瓶可以換一瓶汽水。小張手上有十個空汽水瓶,她最多可以換多少瓶汽水喝?答案是5瓶,方法如下 先用9個空瓶子換3瓶汽水,喝掉3瓶滿的,喝完以後4個空瓶子,用3個再換一瓶,喝掉這瓶滿的,這時候剩2個空瓶子。然後你讓老闆先借給你一瓶汽水,喝掉這瓶滿的,喝完以後用3個空...

每日一題30 拓補排序

所謂拓補排序就是確定圖中節點的一種順序,使得某些在別的節點訪問之前不能訪問到的節點排在後面。所以該演算法的核心是每一步選擇乙個沒有入度的節點,因為沒有入度意味著該節點沒有前驅,得到乙個節點後,就把以新得到的節點為起點的邊去除,從剩下的節點重複前面的過程直到所有節點都排好序或找不到乙個不具有入度的節點...

每日一題 83 分蘋果(貪心)

n 只奶牛坐在一排,每個奶牛擁有 ai 個蘋果,現在你要在它們之間轉移蘋果,使得最後所有奶牛擁有的蘋果數都相同,每一次,你只能從乙隻奶牛身上拿走恰好兩個蘋果到另乙個奶牛上,問最少需要移動多少次可以平分蘋果,如果方案不存在輸出 1。輸入描述 每個輸入包含乙個測試用例。每個測試用例的第一行包含乙個整數 ...