D. Colored Balls

原题链接

题解

1.假设有k类球,当这k类球中数量最多的那一类的数量为m,若m不超过总数的一半,那么答案就是总数的一半+总数的奇偶性,否则答案是m
2.由于数据很小,所以可以 O(n2)
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;
}
posted @   纯粹的  阅读(9)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示