arr[i] :表示每个牌堆的纸牌的数目
平均值 :当纸牌数都一样多时,纸牌的数目从左向右考虑,每堆纸牌有三种状态:
1) arr[i] == 平均值,考虑arr[i+1]
2) arr[i] < 平均值,此时由arr[i+1]移给arr[i]纸牌。 => 移动纸牌数:(平均值 - arr[i])张注:考虑此时,arr[i]缺牌,那么i右边的牌堆必然多牌,无论哪堆多牌,必然有由arr[i+1]将牌移给arr[i]的过程。3) arr[i] > 平均值,此时由arr[i]移给arr[i+1]纸牌。 => 移动纸牌书:(arr[i] - 平均值)张注:考虑此时,arr[i]多牌,那么i右边的牌堆必然缺牌,无论哪堆缺牌,必然有由arr[i]将牌移给arr[i+1]的过程。每个状态下,所做的动作都是必然需要的,没有做无用功,所以结果最优。更具体的理解,请点击这里
 1 //#define HOME
 2 #include <iostream>
 3 #include <cstdio>
 4 #include <cstdlib>
 5 #include <cmath>
 6 #include <string>
 7 #include <algorithm>
 8 #include <cstring>
 9 #include <set>
10 #include <utility>
11 #include <locale>
12 #include <ctime>
13 using namespace std;
14 const int INF = 0x3f3f3f3f;
15 const int MaxN = 110;
16
17 int N, arr[MaxN], sum;
18
19 void Solve()
20 {
21     int ave = sum / N;
22     int cnt = 0;
23     for (int i = 0; i < N - 1; ++i)
24     {
25         if (arr[i] == ave) continue;
26         if (arr[i] < ave)
27         {
28             arr[i + 1] -= (ave - arr[i]);
29             ++cnt;
30         }else
31         {
32             arr[i + 1] += (arr[i] - ave);
33             ++cnt;
34         }
35     }
36     cout << cnt << endl;
37 }
38
39 int main()
40 {
41     cin >> N;
42     sum = 0;
43     for (int i = 0; i < N; ++i)
44     {
45         cin >> arr[i];
46         sum += arr[i];
47     }
48     Solve();
49
50
51 #ifdef HOME
52     cerr << "Time elapsed: " << clock() / CLOCKS_PER_SEC << " ms" << endl;
53 #endif
54     return 0;
55 }

 

转载于:https://www.cnblogs.com/shijianming/p/4833964.html

CODE[VS] 1098 均分纸牌 ( 2002年NOIP全国联赛提高组)相关推荐

  1. 1099 字串变换 2002年NOIP全国联赛提高组

    1099 字串变换 2002年NOIP全国联赛提高组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解 题目描述 Description 已知有两个字串 A ...

  2. 棋盘型动态规划 之 CODE[VS] 1169 传纸条 2008年NOIP全国联赛提高组

    /* 这道题要解决两个问题1)状态和状态方程2)怎么保证每走一步,所形成的路径不相交,以保证最后生成的完整路径不相交.(1)状态: dp[i][j][k][l] = 小渊传递的纸条到[i][j]的位置 ...

  3. Codevs 1010 过河卒 2002年NOIP全国联赛普及组

    1010 过河卒 2002年NOIP全国联赛普及组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 传送门 题目描述 Description 如图,A 点有一个过河卒 ...

  4. 1009 产生数 2002年NOIP全国联赛普及组

    009 产生数 2002年NOIP全国联赛普及组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 给出一个整数 n(n<10^ ...

  5. 过河 2005年NOIP全国联赛提高组(离散化+dp)

    1105 过河 2005年NOIP全国联赛提高组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond       题目描述 Description 在河上有一 ...

  6. 聪明的质监员 2011年NOIP全国联赛提高组(二分+前缀和)

    聪明的质监员 2011年NOIP全国联赛提高组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold   题目描述 Description 小 T 是一名质量监督员, ...

  7. Codevs 1066 引水入城 2010年NOIP全国联赛提高组

    1066 引水入城 2010年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 传送门 题目描述 Description 在一个遥远的国度 ...

  8. 选数 2002年NOIP全国联赛普及组

    题目描述 Description 已知 n 个整数 x1,x2,-,xn,以及一个整数 k(k<n).从 n 个整数中任选 k 个整数相加,可分别得到一系列的和.例如当 n=4,k=3,4 个整 ...

  9. 【2002年NOIP全国联赛普及组】过河卒

    描述 棋盘上 A 点有一个过河卒,需要走到目标 B 点.卒行走的规则:可以向下.或者向右.同时在棋盘上 C 点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点.因此称之为" ...

最新文章

  1. C#语言学习思维导图
  2. UA OPTI512R 傅立叶光学导论17 离散傅立叶变换简介
  3. 通俗易懂的SpringBoot教程---day2---Springboot配置文件
  4. Python——rrdtool模块的安装
  5. 关于.dll' could not be found 的问题以及解决方案
  6. 51nod 1050 循环数组最大子段和【环形DP/最大子段和/正难则反】
  7. css 水印_自制腾讯视频去除水印Chrome插件!厉害吧!
  8. python找不到解释器_为什么pycharm找不到python解释器
  9. 任务栏文件资源管理器打开特别卡
  10. 继承中各代码块的执行顺序
  11. 微软日语输入法键盘输入对应不上 解决方法
  12. 华为云从入门到实战 | 云容器服务
  13. 【Spring Data JPA】JPA常用注解
  14. Win10 上使用 MSYS 开发 Android NDK 程序
  15. java8获取以秒单位的时间戳
  16. C++进阶学习(二)----C到C++II
  17. 学习笔记(5):第01章-互联网的概述(历史发展+技术发展+常见应用)-互联网的接入(手把手教你调试ADSL宽带技术)
  18. 用GRUB2来实现——坎特伯雷项目 The Canterbury Project
  19. sql server查询不显示结果_仅凭网上查询结果显示邮件由行政机关签收,能证明行政机关一定收到了当事人的申请吗?...
  20. T 字头 大型国际新能源公司 急聘 待遇优厚

热门文章

  1. 从别的网站摘抄的,挺有用的
  2. 百度智呼吸 html5,手机百度 iBreath智呼吸
  3. 查询天地图访问配额 https://console.tianditu.gov.cn/api/statistics
  4. 真是搞不懂原始套接字SOCK_RAW和AF_PACKET
  5. mysql——数据库设计中int与varchar中的长度含义
  6. yaml语法三大规则
  7. .net socket与完成端口、异步发送相关研究
  8. 发布一套IOCP框架
  9. hosts文件分发其他机器
  10. 【linux所有命令——复习】