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...