题意
给你 n 件乐器,问你在 k 天之内最多能学完多少件,输出能学完的件数,并输出他原来的下标(第几件)
思路
每次去学需要天数最少的
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
struct node
{
int x;
int num; //记录他原来是第几件乐器
}p[110];
int cmp(node a,node b)
{
return a.x<b.x;
}
int main()
{
int n,k;
bool v[110]; //标记是否已学习
scanf("%d%d",&n,&k);
for(int i=1;i<=n;i++)
{
scanf("%d",&p[i].x);
p[i].num=i;
v[i]=0;
}
sort(p+1,p+n+1,cmp);
int i;
for(i=1;i<=n&&k>=0;i++)
{
if(k>=p[i].x)
{
k-=p[i].x;
v[p[i].num]=1;
}
else
break;
}
printf("%d\n",i-1);
for(int j=1;j<=n;j++)
{
if(v[j])
printf("%d ",j);
}
return 0;
}