算法竞赛入门经典训练指南 第一章

第一章 算法设计基础



一、例题

1、Dragon of Loowater (UVa 11292)

贪心
先把龙头的直径和武士的能力排序,然后从小到大考虑每个武士
如果这个武士能够把当前正在考虑的龙头干掉就干,否则考虑下一个武士
贪心的正确性十分显然

2、Commando War (UVa 11729)

贪心
直觉告诉我们,先交待执行时间长的任务
所以按照执行时间的大小从大到小排序,依次交待任务即可
为什么是对的呢
假如交换两个任务的顺序,例如将任务a与任务b交换,设a是第i个任务,b是第j个
a的结束时间原来为 ti+j[a] t ∗ i + j [ a ] ,现在为 tj+j[a] t ∗ j + j [ a ]
b的结束时间原来为 tj+j[b] t ∗ j + j [ b ] ,现在为 ti+j[b] t ∗ i + j [ b ]
已知 j[a]>j[b],i<j j [ a ] > j [ b ] , i < j
显然 max(ti+j[a],tj+j[b])<max(tj+j[a],ti+j[b]) m a x ( t ∗ i + j [ a ] , t ∗ j + j [ b ] ) < m a x ( t ∗ j + j [ a ] , t ∗ i + j [ b ] ) (和相同,差变大),因此只会变差
所以原来的顺序是正确的

3、Spreading the Wealth (UVa 11300)

先把最后所有人的钱算出来
然后设n个变量, xi x i 表示第i个人给第i+1个人多少钱,如果为负则表示第i+1个人给第i个人 |xi| | x i | 的钱
对每个人列出一个等式,我们就会发现,实质上是要求一个x,使得 |xa1|+|xa2|+|xa3|+...+|xan| | x − a 1 | + | x − a 2 | + | x − a 3 | + . . . + | x − a n | 最大
显然x应该取a数组的中位数
然后这题就解决了

4、Graveyard (LA 3708)

观察样例会发现,有一个墓的位置不变
这其实不难证明。考虑最优的安排方案,假如所有墓的位置都变了,不妨将所有墓顺时针转一个小角度,假如更优,则矛盾,否则将其反方向转,一定更优,除非有一个点在原来的位置,这样怎么转这个点的权值都会增加,所以不会更优
这一点确定以后,就把每个墓最终的位置都确定了,只要把每个墓和离它最近的位置的距离加起来即可

5、Piotr’s Ants (UVa 10881)

经典题 (弹性碰撞)
就是我sb地看错了题,以为撞到两边之后并不会掉下去而是折返,想了好久,后来发现自己是如此地**

6、Image is Everything(LA 2995)

有趣的题
原来不大会做,看了书上的做法
就是从外围一点点减去方块,直到都满足条件为止
首先如果六视图中某个视图的某个位置为 . . 那么这个位置所对应的一条都没有方块
然后就是一个一个视图地看,对于每个有颜色的视图格子,枚举深度d,这样对应的方块就唯一了,去看对应的方块有没有被上过色,如果没有,将其上色,否则看颜色是否相同,若不相同,则该方块不存在,然后去看更深一层的方块

7、Even Parity(UVa 11464)

这题不难
2n枚举第一行的状态,然后直接算出整个矩阵,看是否可以得到

8、Colored Cubes(LA 3401)

这题真心无聊
明明很水的一道题,强行搞成非常繁琐
首先算出来每个正方体旋转一共24种形态,然后就解决了
固定第一个正方体形态不变,枚举其它正方体的旋转方式,然后看每个面出现最多的颜色是啥,n-出现最多的次数 的和即为当前状态的答案
预处理出所有旋转的方式(打表)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值