首页 > 学院 > 开发设计 > 正文

【p1031-均分纸牌】解题记录

2019-11-08 02:42:30
字体:
来源:转载
供稿:网友

原题地址点 这里

这是一道应用的贪心策略的题目。

在知道各摞纸牌数量后,可以计算出纸牌的平均高度,也就是最后均分后的高度。

然后具体的贪心算法为:

顺序遍历每一张纸牌。如果当前纸牌高度刚好为均分后的高度,则继续遍历下一张。如果当前纸牌数多余或少于均分高度,则向下一摞添加或借出差的纸牌,哪怕会令下一摞纸牌高度变成负数也这么做,然后将移动次数加一。到最后一摞纸牌时,只要题目保证有解,则此时所有纸牌高度一定等于均分高度。

但是为什么这种看似奇怪的方法能得出正确的结果呢?(以后有时间再把坑填上~)

最终代码如下:

#include <cstdio>#include <numeric>using namespace std;const int maxn= 105;int cnt[maxn], size, ans=0;int main(){ scanf("%d", &size); for(int i=0; i<size; ++i){ scanf("%d", &cnt[i]); } int ave= accumulate(cnt, cnt+size, 0)/size; for(int i=0; i<size; ++i){ int &now= cnt[i], &next= cnt[i+1]; if(now!=ave){ next-= ave-now; ++ans; } } PRintf("%d/n", ans); return 0;}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表