HDU 3697(H) ——Selecting courses(暴力枚举,贪心)

题目链接:点击打开链接

题目大意:任选一个时刻开始,每隔五分钟可以在这个时刻选择一门且只能选择小于等于一门课程,每门课程有一个有效期,可以在这个有效期内选择且这个有效期为【t1, t2)形式 !! 然后让你找出最多能选择几门课程

解题思路:先确定在什么时候开始,开始时间只需要在0 ~ 4之间列举即可,剩下的就都能取到了,

                   开始时间确定了,然后开始求在不同开始时间内能选择到的最多科目数,这时候就该用到贪心的思想了,都在有效期内的两个课程选择结束时间最早的课程,这样就可以不浪费时间选择尽可能多的课程

代码:

//HDU 3697 暴力 + 贪心
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;

class course
{
public:
    int st;
    int en;
    course(int s, int e): st(s), en(e) {}
    course(): st(0), en(0) {}
};

bool cmp(course c1, course c2)
{
    if(c1.en < c2.en) return true;
    else return false;
}

int main()
{
    int n;
    course c[310];
    while(scanf("%d", &n) && n != 0)
    {
        for(int i = 0; i < n; i++)
        {
            cin >> c[i].st >> c[i].en;
        }
        sort(c, c+n, cmp); //按结束时间进行排序

     //   for(int i = 0; i < n; i++)
     //       cout << c[i].st << " " << c[i].en << endl;

        int vis[310];

        int select = 0;
        for(int i = 0; i < 5; i++) //开始时间
        {
            int select1 = 0;
            memset(vis, 0, sizeof(vis));
            for(int k = i; k <= c[n-1].en; k += 5)
            {
               for(int j = 0; j < n; j++)
               {
                 if(k >= c[j].st && k < c[j].en && vis[j] == 0)
                 {  select1++; vis[j] = 1; break;}
               }
            }

            if(select1 > select) select = select1;
        }
        cout << select << endl;
    }
    return 0;
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值