[背景]
在某日和某大佬们一起举行的ACM上,我们小队面对一道多重背包题跪了...凉凉(可喜的是我AC了C,G两题)。
在面对大佬们的D题上,我们使用了,啊不,第一次使用了贪心算法,奇迹般的通过了九个点(死在了第十个点上)
[贪心算法]
1.
贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关。
2.贪心的宗旨:骗分。
[然后上题目]
#173.三值排序
题目描述排序是一种很频繁的计算任务。现在考虑最多只有三值的排序问题。一个实际的例子是,当我们给某项竞赛的优胜者按金银铜牌排序的时候。在这个任务中可能的值只有三种1,2和3。我们用交换的方法把他排成升序的。 写一个程序计算出,给定的一个1,2,3组成的数字序列,排成升序所需的最少交换次数。
输入格式 第 1 行: 奖牌个数N (1 <= N <= 1000) 第 2 行到第 N+1 行: 每行一个数字,表示奖牌。共N行。(1..3)
输出格式 共一行,一个数字。表示排成升序所需的最少交换次数。
[分析]
很典型的贪心,即统计1,2,3分别出现的次数
然后我们就确定了1,2,3分别应该出现在哪里。
接下来就是贪心地搜索他们应该出现在哪里了(让1应该出现的位子不留2,3,并让2,3,尽可能靠近他们应该处在的位置).
很好,这个东西已经差不多了。
最后我们要考虑的是2和3中的叛徒。
很好,AC
#174.修理牛棚
这道题需要逆向思维,不用去想连木板,而是去找最大的空隙。
#177 穿墙人
题目描述
穿墙术是现代魔术表演中常见的一个节目。魔术中的穿墙人可以穿过预先设计好的若干道墙。所有的墙被安置在一个网格区域中,如图所示,‘?’表示墙所占据的网格,所有的墙都水平放置,宽度为1个单位,但长度可能不同。任何两道墙不会相互重叠,即任何一个‘?’不能同时属于两道或两道以上的墙。穿墙人的能量有限,每次表演至多只能穿过k道墙。 表演开始时,主持人让观众任选网格的某一列,然后穿墙人开始沿着此列从网格的上端穿过中间的每一道墙到达网格的底部。但如果观众所选择的那一列中有大于k道墙,则穿墙人的表演会失败。 例图所示,如果k=3,则穿墙人可以自上而下地穿过除第6列外的任何列,因为只有第6列需要穿越4道墙,但穿墙人在同一列上最多只能穿过3