问题描述:有一批集装箱要装上载重量为capacity的轮船,其中第i个集装箱的重量为weight(i),要求在装载提及不受限制的情况下,将尽可能多的集装箱装上船。
该问题可用贪心,先将集装箱的重量按升序排序,然后从第一个开始装载。
代码如下:
#include
#include
using namespace std;
struct load{
int index;
double weight;
bool flag ; //标记,用以确定是否装载这个物品
};
bool cmp(const load &a,const load &b)
{
return a.weight
}
int main()
{
load a[1000];
bool b[1000];
int capacity,i=0,n;
cin>>capacity;
int num;
while(num!=0)
{
a[i].weight = num;
a[i].flag = 0;
a[i].index = i;
n=i;
i++;
cin>>num;
}
sort(a,a+n+1,cmp);
for(int i=0;i<=n&&a[i].weight<=capacity;i++)
{
a[i].flag = 1;
capacity-= a[i].weight;
}
for(int i=0;i<=n;i++)
b[i]=0;
for(int i=0;i<=n;i++)
if(a[i].flag)
b[a[i].index]=1;
for(int i=0;i<=n;i++)
if(b[i])
cout<
cout<
return 0;
}
运行结果: