题目大意: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;
}