D. Colored Balls
题解
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;
}

浙公网安备 33010602011771号