🎁 简单最优装载问题
🎊问题描述:
1. 我们有n个物体(每个物体重量不等)
2. 我们有一个包, 里面只能放重量总和为c的物品。
请问怎么放能使 物品最多 ?
🎊解题思路:
“ 这个很容易想到我们挑的东西越小,最后包里的物品数就越多 ”
所以我们:
首先使用一个“ 结构体数组a[N] ” 记录下这些物体分别对应的序号index和重量w,
然后按照 重量w 从小到大排序( 注意序号不能打乱)
最后,按照排好序的数组。一个一个放进包里直到放不下为止。
🎊程序代码:
//最优装载
#include<iostream>
#include<algorithm>
#define N 100
using namespace std;
struct Node{
int index;//第index件物品
int w;//物品的重量
};
bool cmp(const Node &a,const Node &b){
return a.w<b.w;
}
int main(){
Node a[N];
int n,c;
cin>>n; //输入初始可选物品总数
cin>>c;//输入背包的容量
for(int i=0;i<n;i++){
cin>>a[i].w;
a[i].index=i+1;
}
sort(a,a+n,cmp); //将所有物品按重量递增排序
int sum=0; //sum用于统计背包里的物品总数。
for(int i=0;i<n;i++){
if(c-a[i].w>=0){ //判断背包是否还装的下当前物品
cout<<"选择重为"<<a[i].w<<"的第"<<a[i].index<<"号物品"<<endl;
c-=a[i].w; //将物品放入背包里后背包容量减少。
sum++;
}
else{
break;
}
}
cout<<"包里有"<<sum<<"件物品"<<endl;
return 0;
}
🎊实例测试+运行结果:
🎊正经致谢: