lg1094紀念品分組(貪心)

2021-10-23 02:18:24 字數 1262 閱讀 8376

1094紀念品分組(貪心)

**鏈結

;//這個陣列用來存標記

int a[

30005]=

;scanf

("%d\n%d"

,&w,

&n);

j=n;

for(i=

1;i<=n;i++

)sort

(a+1

,a+n+1)

;/*for(i=1;i<=n;i++)

*/for(i=

1;i<=n;i++)}

}/*for(i=1;i<=n;i++)

*/for(i=

1;i<=n;i++

)printf

("%d"

,count)

;return0;

}備註:1.網友思路:讀入之後先用sort排序,然後用兩個指標一起向中間走,每次選擇都盡可能的讓當前狀態下最大的和最小的分在一組,如果不行就最大的單獨分一組,這樣貪心下來就是最少分的組了。

如果最大的a[r]不與最小的a[l]分在一組,而是a[r]與a[i]在一組,a[l]與a[j]在一組,因為a[l]<=a[i]&&a[r]>=a[j],所以交換兩者分組不影響後續選擇,而a[r]如果不能與a[l]在一組,因為a[l]為當前最小值,所以a[r]只能單獨為一組.

網友的**:(respect)

#include

using namespace std;

int w,ans=0;

int n,a[

30001];

int l,r,i;

intmain()

printf

("%d"

,ans)

;return0;

}

我的思路:

也是兩個指標分別從兩頭向中間走,然後再用乙個flag陣列用來標記這個數是否已經被分好組,已經被分好成為一組的兩個數被編輯成-1;在遍歷整個flag陣列,把單下來的單獨成一組,單下來的是和別的加在一起超過w元的和最後單掉的那乙個

紀念品分組 貪心

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

簡單貪心 P1094 紀念品分組

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

P1094 紀念品分組

有n個禮物,給出每個禮物的 按 分組,每組最多兩個禮物,每組禮物 不能超過m,求最小分多少組。100 9 90 20 20 30 50 60 70 80 906排序,從小到大,看看小的和大的最多組成的個數。var n longint a array 1.30000 of longint proced...