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;
}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值