问题描述:
有一批集装箱要装上一艘载重量为c的轮船。其中集装箱i的重量为Wi。最优装载问题要求确定在装载体积不受限制的情况下,将尽可能多的集装箱装上轮船。
编程任务: 对于给定的n个集装箱和轮船的载重量C,编程计算装入最多时的集装箱个数。
输入:
输入由多组测试数据组成。每组测试数据输入的第1行中有2个正整数n和C。正整数n是集装箱个数;正整数C是轮船的载重量。接下来的一行中有n个整数,分别表示n个集装箱的重量,它们之间用空格分隔。其中1<=n<=2000,所有正整数不超过231-1
输出:
对应每组输入,输出的每行是计算出的装入最多时的集装箱个数。
样例输入:
4 5
3 5 2 1
样例输出:
2
刚刚学习贪心,一个算法入门的题目,主要是证明贪心的正确性就OK。
把重量按从小到大排序,重量最小的先装载,就可得到装载数最大。
代码如下:
#include <stdio.h>
int main()
{
int c,i,j,n,temp,sum,index;
int a[100];
while(scanf("%d %d",&n,&c),n,c)
{
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])
{
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
}
sum=0;
index=0;
for(i=0;i<n;i++) //最小的装上
{
if(a[i]<c-sum)
{
sum+=a[i];
index++;
}
}
printf("%d\n",index);
}
return 0;
}