HDU 贪心

链接:http://acm.hdu.edu.cn/showproblem.php?pid=2037


贪心算法一般来说是解决“最优问题”,具有编程简单、运行效率高、空间复杂度低 等特点。
是程序竞赛中的一个有力武器,受到广大同学们的青睐。 贪心算法一般是求“最优解”这类问题的。
最优解问题可描述为:有 n 个输入,它的 解是由这 n 个输入的某个子集组成,
并且这个子集必须满足事先给定的条件。
这个条件称 为约束条件。而把满足约束条件的子集称为该问题的可行解。
这些可行解可能有多个。为 了衡量可行解的优劣,事先给了一个关于可行解的函数,称为目标函数。
目标函数最大(或 最小)的可行解,称为最优解。


代码如下:


#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;


typedef struct Node_ {   //定义结构体变量Node,有开始时间和结束时间两个数据成员;
    int begin, end;
}Node;


Node N[1000005];


int cmp(const void *a, const void *b) {  //一次对结束时间和开始时间从小到大排序;
    Node *p1 = (Node *)a;
    Node *p2 = (Node *)b;
    if(p1->end != p2->end) {
        return p1->end - p2->end;
    }else {
        return p1->begin - p2->begin;
    }
}
/*
bool cmp(Node a, Node b) {  
    if(a.end != b.end) {
        return a.end < b.end;
    }else {
        return a.begin < b.begin;
    }
}
*/
int main() {
    int n;

    while(~scanf("%d", &n)) {
        for(int i=0; i<n; i++) {
            scanf("%d%d", &N[i].begin, &N[i].end);
        }
        qsort(N, n, sizeof(N[0]), cmp);
        //sort(N, N+n, cmp);
        int k = 0, count = 1;
     
        for(int i=1; i<n; i++) {
            if(N[i]. begin >= N[k].end) {
                count++;  //计数;
                k = i;   //用k来记住当前的选择, 每次选择都为当前的最优解;
            }
        }
        printf("%d\n", count);
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值