[2018.04.17][水][日志][6][#171~#181][贪心算法][已经丧心病狂][背景->][最虚伪的算法]

本文介绍了贪心算法在几道编程题中的应用,包括三值排序、修理牛棚和巧克力切割问题。通过分析和解题过程,展示了贪心算法如何解决实际问题,强调了在某些情况下贪心策略的有效性。
摘要由CSDN通过智能技术生成
[背景]
    在某日和某大佬们一起举行的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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值