藍橋杯VIP試題 演算法訓練 紀念品分組 C C

2021-10-03 13:33:38 字數 1380 閱讀 1279

資源限制

時間限制:1.0s 記憶體限制:256.0mb

問題描述

元旦快到了,校學生會讓樂樂負責新年晚會的紀念品發放工作。為使得參加晚會的同學所獲得的紀念品價值 相對均衡,他要把購來的紀念品根據**進行分組,但每組最多只能包括兩件紀念品,並且每組紀念品的**之和不能超過乙個給定的整數。為了保證在盡量短的時 間內發完所有紀念品,樂樂希望分組的數目最少。

你的任務是寫乙個程式,找出所有分組方案中分組數最少的一種,輸出最少的分組數目。

輸入格式

輸入包含n+2行:

第1行包括乙個整數w,為每組紀念品**之和的上限。

第2行為乙個整數n,表示購來的紀念品的總件數。

第3~n+2行每行包含乙個正整數pi (5 <= pi <= w),表示所對應紀念品的**。

輸出格式

輸出僅一行,包含乙個整數,即最少的分組數目。

樣例輸入

1009

9020

2030

5060

7080

90樣例輸出

6資料規模和約定

50%的資料滿足:1 <= n <= 15

100%的資料滿足:1 <= n <= 30000, 80 <= w <= 200

思路:本題思路我覺得我可能計算多了一點,但是比較準確,每個數都會進行比對計算,首先錄入所有數值之後我們可以用兩個for迴圈,拿第乙個數依次與後面的數值去進行乙個相加再和給定的數進行比較,相加的這個數必須小於或等於給定的數,如果可以和給定的數相等當然最好,可以實現數值的最大化,如果不能那就盡量達到最大,以題中所給數值為例,第乙個數90與後面的八個數進行相加再比較,發現不能和任何乙個數相加得到小於100的數,所以90只能乙個一組,並把儲存數值90的陣列的值變為0,說明這個數已經分好組了,再拿第二個數20和後面的數相加比較,如果直接和後面的20相加小於給定的數符合條件就分組,那麼後面的八十必然會成一組,最後會變成7組,和答案不符,所以我們盡量每組的陣列都能達到最大化,這樣就可以減少組數,從而達到最優的答案。

**如下:

#include

using

namespace std;

int a[

30005

],i,j,k=

0,k1=

0,n,w,i1,j1=-1

,i2=0;

intmain()

for(i=

0;i)for

(j=i+

1;j}if

(j1!=-1

)else

a[i]=0

;a[j1]=0

;j1=-1

;k++;}

else

k1=0;

if(i2==n)

} cout<}

藍橋杯演算法訓練 紀念品分組

原題 演算法訓練 紀念品分組 時間限制 1.0s 記憶體限制 256.0mb 問題描述 元旦快到了,校學生會讓樂樂負責新年晚會的紀念品發放工作。為使得參加晚會的同學所獲得的紀念品價值 相對均衡,他要把購來的紀念品根據 進行分組,但每組最多只能包括兩件紀念品,並且每組紀念品的 之和不能超過乙個給定的整...

藍橋杯 演算法訓練 紀念品分組

題目 演算法訓練 紀念品分組 時間限制 1.0s 記憶體限制 256.0mb 問題描述 元旦快到了,校學生會讓樂樂負責新年晚會的紀念品發放工作。為使得參加晚會的同學所獲得的紀念品價值 相對均衡,他要把購來的紀念品根據 進行分組,但每組最多只能包括兩件紀念品,並且每組紀念品的 之和不能超過乙個給定的整...

藍橋杯 演算法訓練 紀念品分組

問題描述 元旦快到了,校學生會讓樂樂負責新年晚會的紀念品發放工作。為使得參加晚會的同學所獲得的紀念品價值 相對均衡,他要把購來的紀念品根據 進行分組,但每組最多只能包括兩件紀念品,並且每組紀念品的 之和不能超過乙個給定的整數。為了保證在盡量短的時 間內發完所有紀念品,樂樂希望分組的數目最少。你的任務...