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