1992 裝木塊問題

裝木塊問題

Time Limit: 1 Seconds     Memory Limit: 32768 K

Total Submit:79     Accepted:7


Description

有一種很特別裝箱子,箱子的所有長度都是L,還有N根木塊,所有木塊的長度都小於等於L,箱子可以裝木塊,但是有如下限制:

1.每個箱子只能裝一根或兩根木塊。
2.如果裝兩根必須使得這兩根木塊的長度之和小於等於箱子的長度L。

你的任務是求出最少需要多少個這樣的箱子才能裝下所有的木塊。

Input

第一行一個N,表示有N根木塊。(1<=N<=105)
第二行一個L,表示箱子的長度。L<=10000
接下來N行,每行一個正整數,表示木塊的長度。

Output

只有一行,最少需要的箱子數。

Sample Input

10
80
70
15
30
35
10
80
20
35
10
30

 

Sample Output

6

 

此題雖然簡單,但很容易超時哦,^_^,起先用c++提交了好多次,都是超時,換一下c就accept了

 

 

Source:

#include<stdio.h>
#include<algorithm>
using namespace std;
int a[100001];
int main()
{
	int n,l,i,j,sum;
	scanf("%d",&n);
	scanf("%d",&l);
	for(i=0;i<n;i++)
		scanf("%d",&a[i]);
	sort(a,a+n);
	sum=0;
	j=n-1;
	for(i=0;i<=j;)
	{	
		if(i==j)
		{
			sum++;
			break;
		}
		else if(a[i]+a[j]>l)
		{
			sum++;
			j--;
		
		}
		else 
		{
			i++;
			sum++;
			j--;	
		}
	}
	printf("%d/n",sum);
	return 0;
}

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章