原題連結
題解
1.假設有k類球,當這k類球中數量最多的那一類的數量為m,若m不超過總數的一半,那麼答案就是總數的一半+總數的奇偶性,否則答案是m
2.由於資料很小,所以可以 \(O(n^2)\)
3.我們可以對所有的球類組合用數量最多的那一類球定義
code
// LUOGU_RID: 163214985
#include<bits/stdc++.h>
#define ll long long
const ll mod = 998244353;
using namespace std;
ll a[5005];
ll cnt[5005] = {0};
int main() {
ll n;
cin >> n;
for (ll i = 1; i <= n; i++) {
cin >> a[i];
}
sort(a + 1, a + 1 + n);
ll ans = 0;
cnt[0] = 1;
for (ll i = 1; i <= n; i++) {
for (ll j = 5000 - a[i]; j >= 0; j--) {
if (cnt[j]) {
cnt[j + a[i]] = (cnt[j + a[i]] + cnt[j]) % mod;
if (a[i] >= j) {
ans = (ans + a[i] * cnt[j]) % mod;
} else {
ans = (ans + ((a[i] + j + 1LL) / 2LL) * cnt[j]) % mod;
}
}
}
}
cout << ans << endl;
return 0;
}