偶尔贪一下。

缓解气氛

个人认为贪心是最容易实现的代码了,虽然他没什么套路可言,但却是只要有了思路,实现起来还是很轻松的。
算法分析

贪心说的就是用贪心的思想去解题,譬如,你要搬家,但是一辆卡车一共有100个空间,你有沙发要20个空间,桌子30个空间,电视35个空间,床60个空间。要求让你一次性多的装在家具。
因为要多,所以如果最先放入的家具越小,留出来的空间就越大。所以,根据贪心的思想,我们就会选沙发,桌子和电视一共需要85个空间,剩余的15个空间就空着吧。因为我们已经没有东西可以放入了。
肯定有人会想,如果尽可能的利用空间岂不是更划算。例如,你要选床和电视,一共95个空间,剩余5个空间。第二次空间利用率虽高但是却不是最优。明显看出第一次装入3个家具,第二次才2个。因为你第一个选的不是最小的。(PS:贪心算法多数需要排序。所以,我们可以运用C++中的sort()函数实现快速排序。具体函数运用百度可查。)

举个栗子
某个国家,决策都是由投票决定。为了提高效率,他们先将所有人分组,首先进行组内决策,然后再进行组与组之间的决策。如果赞同得票数多于(>不是>=)组内一半即小组内赞成。如果有超过(>不是>=)一般的小组是赞成即决策通过。要求求出决策通过的最少赞成人数。
样例输入:
3 //分组个数
5 7 5 //每组内人数
输出:
6
题解

这个题就用到了贪心的思想,首先我们要时刻记得要最少的人赞同,但同时也要通过决策。首先,我们可以考虑,要通过决策一定要2个组,而如果组内人数的基数小,通过决策需要赞成的人数就少。所以,我们要对小组进行排序,即由5
7 5 变为5 5 7,所以我们只需要选前两个小组即是人数基数少的组。在对组内的人数运用贪心即可求得。

代码实现

#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
int main()
{
    int team[101],i,m,sum=0;
    scanf("%d",&m);
    for(i=0;i<m;i++)
        scanf("%d",&team[i]);
    sort(team,team+m);//sort()函数排序
    for(i=0;i<=m/2;i++)
        sum += team[i]/2+1;//对决策人数进行计数
    printf("%d",sum);
    return 0;
}

写在最后

贪心很简单,只需勤加练习。贪心的原理一定要吃透,因为贪心算法,并不是难在代码实现,也不是难在理解。而是对于题目的剖析,要能够看出题目是贪心题目才可能进行代码实现。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值