タイトル説明
近づい元旦、学生は仕事の発行レレお土産新年のパーティーのために責任を負うことになります。取得したパーティのお土産値に学生が比較的バランスされるように、彼はお土産を購入したい価格に応じてグループ化されているが、唯一の各それぞれの価格で2回の記念品やお土産からなる諦めを超えることはできません。整数。すべてのお土産は、最短時間で終了したことを確実にするために、レレは、パケットの最小数を所望しました。
あなたの仕事は、すべてのパケットが出力されるパケットの最小数の一つのプログラムパケットの最小数を見つけるためのプログラムを書くことです。
入力と出力のフォーマット
入力フォーマット:
入力N + 2行を含みます。
ライン1は、各グループの価格とお土産の上限、W最初の整数を含みます。
第二の部材のGの合計数は、整数nは、記念品使用可能にする作用します
3〜n行の+ 2は、PI整数陽性(5 <= Piの<= W)に対応する料金をお土産を含んでいます。
出力フォーマット:
整数を含むのみ出力ライン、すなわち、パケットの最小数。
入力出力サンプル
入力サンプル#1:
100
9
90
20
20
30
50
60
70
80
90
出力サンプル#1:
6つの
----------------
アイデア:グループでそれらの両方を入れ、所定の範囲よりも小さいwは小数点の左側の右側に多数の追加、または個々の権利数を置きますグループインチ
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
int w,ans = 0;
int n, a[30010];
int l,r,i;
int main(){
scanf("%d%d",&w,&n);
for(int i = 1;i <= n;i++)
scanf("%d",&a[i]);
sort(a+1,a+1+n);
l = 1, r = n;
while(l <= r)
{
if(a[l] + a[r] <= w)
l++,r--,ans++;
else
r--,ans++;
}
printf("%d",ans);
return 0;
}