题目描述
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;
}