只记得一题
吃东西,有个吃饱的值,每道菜有吃了所获得的能量。
问最少吃多少能吃饱,能:输出菜数,输出其中一种吃的方法。不能:直接输出-1.
输入:t组数据,每组一个n,m表示菜的数量和吃饱的值(m),n个数,表示吃第n个菜可以获得的能量
#include <stdio.h>
#include <iostream>
#include <algorithm>
using namespace std;
struct food{
int age;
int num;
};
int cmp(food a,food b)
{
return a.age>b.age;
}
int main()
{
int t;
cin>>t;
while(t--)
{
int n,m;
food a[1005];
int sum = 0;
cin>>n>>m;
for(int i = 0 ; i < n;i++)
{
cin>>a[i].age;
sum += a[i].age;
a[i].num = i+1;
}
if(sum<m)
{
cout<<-1<<endl;
continue;
}
sort(a,a+n,cmp);
int temp = 0;
int duzi = 0;
int b[1005];
int j=0;
for(int i = 0 ;i <n ;i++)
{
temp ++;
b[j] = a[i].num;
j++;
duzi += a[i].age;
if(duzi >= m)
break;
}
cout<<temp<<endl;
for(int i = 0;i<j-1;i++)
{
cout<<b[i]<<" ";
}
cout<<b[j-1]<<endl;
}
}
存暴力解决,AC