题目大意:n个任务,给你t的时间,最多做多少个?
选出来的任务时间之后不超过t即可。
假设答案是k个任务,如果其他任务的时间更小,换一个时间更短的任务进来,不影响答案,且花时间只会更少、更好!
因此,我们可以选最短时间的k个任务。
排序,贪心选择即可。
注意:累加可能爆long long,用减法代替加法可避免此问题。
#include <bits/stdc++.h>
using namespace std;
long long n, m, i, j, k, a[1000005];
int main(){
scanf("%lld%lld", &m, &n);
for(i=1; i<=n; i++){
scanf("%lld", &a[i]);
}
sort(a+1, a+n+1);
for(i=1; i<=n; i++){
if(a[i] <= m) m -= a[i];
else break;
}
printf("%lld\n", i-1);
return 0;
}


京公网安备 11010502036488号