这个题可以理解为贪心。思路是每一堆多的牌全部移到下一堆,少的牌全部由下一堆提供。这样可能会出现下一堆的牌不够,移动之后为负数的情况。不过这并不影响最优解,因为下一堆可由后面的堆提供。
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
const int N = 110;
int a[N];
int s, n, ans;
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> n;
for (int i = 0; i < n; i++) {
cin >> a[i];
s += a[i];
}
s /= n;
for (int i = 0; i < n - 1; i++) {
if (a[i] != s) {
a[i + 1] += a[i] - s;
ans++;
}
}
cout << ans;
return 0;
}
本文介绍了一个使用贪心策略解决扑克牌公平分配问题的算法。通过将每堆多出的牌移至下一堆,确保每堆牌数量相等,实现最优解。文章包含完整的C++代码实现。

被折叠的 条评论
为什么被折叠?



