排序每次取最小的即可。
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <queue>
using namespace std;
#define ll long long
struct dd{
int id;
int v;
friend bool operator<(const dd&a,const dd&b){
return a.v > b.v;
}
};
priority_queue<dd> q;
queue<int> qq;
int main()
{
int n,x,m;
cin >> n >> m;
for(int i = 1;i <= n;++i){
scanf("%d",&x);
q.push(dd{i,x});
}
while(!q.empty()){
dd t = q.top();
q.pop();
m -= t.v;
if(m < 0){
break;
}
qq.push(t.id);
}
cout << qq.size() << endl;
bool f = false;
while(!qq.empty()){
if(!f){
cout << qq.front();
f = true;
}
else{
cout << " " << qq.front();
}
qq.pop();
}
cout << endl;
return 0;
}