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

来源:互联网 发布:oracle和mysql的优缺点 编辑:程序博客网 时间:2024/05/29 15:56
  贪心(今年暑假不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;

}



原创粉丝点击