从大往小遍历的去加,直到拥有的大于剩下的价值。
老实说,当阅读理解做吧。
#include <iostream>
#include <string>
#define MAX 105
using namespace std;
int a[MAX];
int main() {
freopen("a.txt", "r", stdin);
freopen("b.txt", "w", stdout);
int n, x, s = 0;
cin >> n;
for (int i = 0; i < n; ++i) cin >> x, a[x]++, s+= x;
int sum = 0, ans = 0;
for (int i = 100; i >= 1; --i) {
while (a[i]) {
if (sum > s) break;
sum += i;
ans++;
s -= i;
a[i]--;
}
if (sum > s) break;
}
cout << ans << endl;
return 0;
}