题目描述

n个物品,已知每个物品的重量,书包的承重固定,每个书包最多放两个物品,可以放一个物品或者两个物品。显然总重量要求总不超过书包承重,假设每个物品的重量也不超过书包承重,问最少需要几个书包?

输入

第一行包含两个正整数n (0<n<=10000)和m (0<m<=2000000000),表示物品个数和书包的承重。

接下来n行,每行一个正整数,表示每个物品的重量。重量不超过1000000000,并且每个物品的重量不超过m。

输出

输出一行,一个整数表示最少需要的书包个数。

样例输入

3 6
1
2
3

样例输出

2

思路:

    先排序,从前往后搜索,从后往前搜索判断两数相加与背包承重比较。

        不难但是当时想的情况太复杂了然后一直有数据过不去,不开心。

具体代码:

#include<stdio.h>
int main()
{
	int n,m,i,j,t,c=0,k,l=0;
	int a[10010];
	scanf("%d%d",&n,&m);
	for(i = 0;i < n;i ++)
		scanf("%d",&a[i]);
	for(i = 0;i < n -1 ;i ++)
		for(j = i + 1;j < n; j ++)
		{
			if(a[i] > a[j])
			{
				t = a[i];
				a[i] = a[j];
				a[j] = t;
			}
		}
		
	i = 0; 
	j = n-1;
	while (i <= j)
	{
		if (a[i] + a[j] <= m)
		{
			l ++;
			i ++;
			j --;
		}
		else if (a[i] + a[j] > m)
		{
			l ++;
			j --;
		}
		else 
		{
			l ++;
		}
	}

	printf("%d\n", l);
	return 0;
}