題目
元旦快到了,校學生會讓樂樂負責新年晚會的紀念品發放工作。為使得參加晚會的同學所獲得 的紀念品價值相對均衡,他要把購來的紀念品根據**進行分組,但每組最多只能包括兩件紀念品, 並且每組紀念品的**之和不能超過乙個給定的整數。為了保證在盡量短的時間內發完所有紀念品,樂樂希望分組的數目最少。
你的任務是寫乙個程式,找出所有分組方案中分組數最少的一種,輸出最少的分組數目。
共n+2行:
第1行包括乙個整數w,為每組紀念品**之和的上上限。
第2行為乙個整數n,表示購來的紀念品的總件數g。
第3至n+2行每行包含乙個正整數p i (5≤p i ≤w)表示所對應紀念品的**。
乙個整數,即最少的分組數目。
輸入 #1 複製
1009
9020
2030
5060
7080
90輸出 #1 複製
650%的資料滿足:1≤n≤15
100%的資料滿足:1≤n≤30000,80≤w≤200
(學生會總喜歡搞這些有的沒有,真的煩。。。。。。。哈哈說著玩,沒進過也不知道。)
題目要求
(把購來的紀念品根據**進行分組,但每組最多只能包括兩件紀念品, 並且每組紀念品的**之和不能超過乙個給定的整數。)
首先讀入,從小到大排序。
我是這樣想到,設乙個k1=1,k2=n 然後從兩頭開始 列舉。最後k1==k2 代表列舉結束;
1每次讓 k1 + k2 ; 如果 k1 + k2 > 給定的整數w 。那麼表示不能合成乙個組,那麼讓k2(大的那個) 單獨一組。ans++,k2–;繼續
2如果 k1 + k2 <= 給定的整數w,那麼表示能合成乙個組,k1++,k–; 繼續
必須注意,每次k2-- 時,要判斷 k2-- 後的k2 與k1是不是 同個數,是代表相撞了,列舉結束;
(文字假裝是 : -> 數 數 數 k1 k2數數數 <-
,這時 k1 k2已經是相鄰了。k2-- 已經沒有能再減了。)
還要注意,如果k2–後與k1不是同個數, 讓k1++, 這時也要判斷 k2 是不是等於k1,是的話 表示他們都指向最後乙個數,這個數 只能自己一組了。
(文字假裝是 : -> 數 數 數 k1數k2數數數 <-
,k2–後,k2來到中間那個數,這時 k1++。那麼k1,k2就指向了同乙個數, 那麼這個數就單獨一組啦,同時結束列舉)
#includeusing namespace std;
#includeint w,n;
int a[30005];
bool cmp(int x,int y)
int main()
sort(a+1,a+1+n);
int k1=1,k2=n;
int ans=0;
while(k1!=k2)else
} }return 0;
}
紀念品分組 NOIP2007
紀念品分組 noip2007 題目描述 元旦快到了,校學生會讓樂樂負責新年晚會的紀念品發放工作。為使得參加晚會的同學所獲得的紀念品價值相對均衡,他要把 購來的紀念品根據 進行分組,但每組最多只能包括兩件紀念品,並且每組紀念品的 之和不能超過乙個給定的整數。為了保證在盡量短的時間內發完所有紀念品,樂樂...
noip2007 紀念品分組 (貪心)
a1160.紀念品分組 時間限制 1.0s 記憶體限制 256.0mb 總提交次數 2125 ac次數 659 平均分 50.07 將本題分享到 檢視未格式化的試題 提交試題討論 試題 noip2007 普及組 問題描述 元旦快到了,校學生會讓樂樂負責新年晚會的紀念品發放工作。為使得參加晚會的同學所...
貪心 紀念品分組(NOIP2007)
ssl 1060 p1094 紀念品分組 題目描述 元旦快到了,校學生會讓樂樂負責新年晚會的紀念品發放工作。為使得參加晚會的同學所獲得的紀念品價值相對均衡,他要把購來的紀念品根據 進行分組,但每組最多只能包括兩件紀念品,並且每組紀念品的 之和不能超過乙個給定的整數。為了保證在盡量短的時間內發完所有紀...