您的位置:首页 > 其它

贪心 HDU.OJ 2037 今年暑假不AC

2017-11-13 22:03 211 查看
  贪心(今年暑假不AC):

          排完序之后时间的排列顺序为:

      1 ---> 3

          3 ---> 4

      0 ---> 7

      3 ---> 8

          2 ---> 9

          5 ---> 10

      6 ---> 12

       4 ---> 14

      10 --> 15

      8 ---> 18

      15 --> 19

      15 --> 20

    贪心过程:

    当前最优解的变换过程:

    1>. (1 - 3)  (3 - 4)  (5 - 10) (10 - 15) (15 - 19) 可参加活动数为 5;

    2>. (3 - 4) (5 - 10(10 - 15(15 - 19) 可参加活动数为 4;

    3>. (0 - 7) (10 - 15) (15 - 19) 可参加活动数为 3;

         。。。。。

    

    贪心:

    

    贪心算法一般来说是解决“最优问题”,具有编程简单、运行效率高、空间复杂度低 等特点。

    贪心算法一般是求“最优解”这类问题的。

    最优解问题可描述为:有 n 个输入,它的 解是由这 n 个输入的某个子集组成,

    并且这个子集必须满足事先给定的条件。

    这个条件称 为约束条件。而把满足约束条件的子集称为该问题的可行解。

    这些可行解可能有多个。为 了衡量可行解的优劣,事先给了一个关于可行解的函数,称为目标函数。

    目标函数最大(或 最小)的可行解,称为最优解。

    
    HDU.OJ 2037 今年暑假不AC

#include <bits/stdc++.h>

using namespace std;

struct qujian

{

    int x, y;

}zu[100020];

int cmp(qujian a, qujian b)//先按结束时间排序

{

    if(a.y != b.y)

        return a.y < b.y;

    if(a.x != b.x)

        return a.x < b.x;

}

int main()

{

    int n, t, m, i;

    while(~scanf("%d",&t))//测试组数

    {

        while(t--)

        {

            scanf("%d", &n);

            m = 1;//最多活动数

            for(i = 0; i < n; i++)

            {

                scanf("%d%d", &zu[i].x, &zu[i].y);

            }

            sort(zu, zu+n, cmp);

            int start = zu[0].y;

            for(i = 1; i < n; i++)

            {

                if(start <= zu[i].x)

                {

                   start = zu[i].y;

                   m++;

                }

            }

            printf("%d\n", m);

        }

    }

    return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: