题目描述
使用贪心算法求解最优装载问题。
输入
每组输入包括两部分,
第一行包括集装箱个数n,以及船的装载量C。
接下来n行每行则输入集装箱编号以及其重量。
输出
输出包括两行,第一行为最多可装载的集装箱数量 。
第二行则为最优装载方案对应的所有集装箱编号(按照装载次序输出,用空格隔开) 。
样例输入 Copy
5 10
1 1
2 2
3 3
4 4
5 5
样例输出 Copy
4
1 2 3 4
#include <iostream>
#include <algorithm>
using namespace std;
struct Xiang{
int id;
int w;
bool selected;};
int cmp(const Xiang &a,const Xiang &b){
return a.w<=b.w;
}
int main()
{
int n,C;
while(cin>>n>>C){
Xiang p[n];
for(int i=0;i<n;i++){
cin>>p[i].id;
cin>>p[i].w;
p[i].selected=false;
}
sort(p,p+n,cmp);
int weight=C;
int sum=0;
for(int i=0;i<n;i++){
if(p[i].w<=weight&&weight>0){
weight-=p[i].w;
sum++;
p[i].selected=true;
}
}
cout<<sum<<endl;
for(int i=0;i<n;i++){
if(p[i].selected==true){
cout<<p[i].id<<' ';
}
}
}
return 0;
}