D. Colored Balls
题意:给你n个颜色不同的小球,以及每种颜色小球的数量,让你求 种集合分割方案的价值和
我们考虑一个集合的贡献,如果最大值大于sum的一半,那么值就是max,反之值就是(sum+1)/2
那么我们可以sort a数组枚举最大值,同时简单计数dp统计 各个 总数量的集合的方案数
int n, m;
int a[N];
int f[M];
void solve()
{cin >> n;for (int i = 1; i <= n; i++)cin >> a[i], m += a[i];sort(a + 1, a + 1 + n);int ans = 0;f[0] = 1;for (int i = 1; i <= n; i++) // sort之后,就相当于枚举了最大值{int x = a[i];for (int j = 0; j <= m; j++){if (j <= x)ans = (ans + x * f[j]) % mod;elseans = (ans + (x + j + 1) / 2 * f[j]) % mod;}for (int j = m; j >= x; j--)f[j] = (f[j] + f[j - x]) % mod;}cout << ans % mod << endl;
}