HDU 3697 Selecting courses 选课(AC代码)贪心

题意:一个学生要选课,给出一系列课程的可选时间(按分钟计),在同一时刻只能选一门课程(精确的),每隔5分钟才能选一次课,也就是说,从你第一次开始选课起,每过5分钟,要么选课,要么不选,不能隔6分钟再选。在给出的课程的事件Ai~Bi内,Bi起的那分钟是不能够选的了,就是说截止到(Bi-1)分钟59秒还能选,Bi就不能选了。

思路:由于n最大才300,那就可以使用暴力解法。开始时刻可以从0~4分钟这5个时刻开始,因为每5分钟是个周期,比如0分没选,而5分才选了,这和从5分才开始选是一样的。每隔5分钟就检测一下有没有课可以选,如果有的话就立刻选,这么做有个前提,就是得按课程的截止时间来排序,然后往升序的方向开始扫。由于不能重复选课,所以需要一个数组来标记他们是否已经被选过了。每一时刻只能选一门,所以当选到了一门就可以跳到5分钟后了。

代码:

 1 #include <iostream>
 2 #include <algorithm>
 3 #define N 305
 4 using namespace std;
 5 struct course
 6 {
 7     int a,b;
 8 }courses[N];
 9 bool cmp(course temp1,course temp2)
10 {
11     if(temp1.b==temp2.b)
12         return temp1.a<temp2.a;
13     return temp1.b<temp2.b;
14 }
15 int main()
16 {
17     int n,i,j,num,max,cur;
18     bool vis[N];
19     while(cin>>n,n)
20     {
21         max = 0;
22         for(i=0;i<n;i++)
23             cin>>courses[i].a>>courses[i].b;
24         sort(courses,courses+n,cmp);
25
26         for(i=0;i<5;i++)    //穷举5个时间
27         {
28             num = 0;
29             memset(vis,0,sizeof(vis));
30             for(j=i; j<courses[n-1].b; j+=5)
31             {
32                 for(int k=0;k<n;k++)
33                 {
34                     if(!vis[k] && j<courses[k].b && j>=courses[k].a )
35                     {
36                         num++;
37                         vis[k] = true;
38                         break;
39                     }
40                 }
41             }
42             if(max<num)
43                 max=num;
44         }
45         cout<<max<<endl;
46     }
47     return 0;
48 }

3697

时间: 2025-01-16 16:37:25

HDU 3697 Selecting courses 选课(AC代码)贪心的相关文章

HDU 3697 Selecting courses(贪心)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3697 Problem Description A new Semester is coming and students are troubling for selecting courses. Students select their course on the web course system. There are n courses, the ith course is available

hdu 3697 Selecting courses (暴力+贪心)

Selecting courses Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 62768/32768 K (Java/Others) Total Submission(s): 1856    Accepted Submission(s): 469 Problem Description A new Semester is coming and students are troubling for selecting cours

Hdu 3697 Selecting courses(贪心+暴力)

题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=3697 思路:将课程按照右端点从小到大排序,相同时按照左端点从小到大排序.选课开始时间只能是0,1,2,3,4,开始时间确定后每次选课时间确定,暴力枚举即可. #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; const in

HDU 2037 今年暑假不AC (贪心)

HDU 2037 今年暑假不AC (贪心) 题目: http://acm.hdu.edu.cn/showproblem.php?pid=2037 非常经典的活动安排问题变形, 与算法教材的活动安排一样,根据结束时间进行排序,然后相容的累加即可. // 经典贪心问题 活动时间安排的简单变形 // 按活动结束时间,递增排序, 结束时间早的,优先选择 #include <bits/stdc++.h> using namespace std; typedef struct active { int s

Hdoj 3697 Selecting courses 【贪心】

Selecting courses Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 62768/32768 K (Java/Others) Total Submission(s): 2082    Accepted Submission(s): 543 Problem Description A new Semester is coming and students are troubling for selecting cours

HDU 2191 Robberies抢劫案(AC代码)01背包的变形

1 #include <iostream> 2 #define limit 110 3 using namespace std; 4 int n; 5 int money[limit]; //银行的钱 6 double safe[limit]; //被抓的概率 7 double dp[10000]; 8 double p,big; 9 void cal(int temp,int n)//所有银行的钱,n家银行 10 { 11 int i,j; 12 for(i=0;i<n;i++) 13

HDU 2037 今年暑假不AC【贪心】

解题思路:即为给出一个总长度确定的区间,再输入不同的子区间,求在这个总区间里面包含的不相交的子区间最多有多少个. 可以由最特殊的情况来想,即给出的这些子区间现在都不相交,比如 ----- (1,3)                                                                       1 ---------- (2,4)                                                         2 ---

HDU 1059 Dividing 分配(AC代码)多重背包的变形

1 #include <iostream> 2 using namespace std; 3 int num[6]; 4 int dp[200]; 5 bool divide(int sum) 6 { 7 int k,i,j; 8 for(i=0;i<6;i++) 9 for(k=0;k<num[i];k++) 10 for(j=sum;j>i;j--) 11 if(dp[j-(i+1)]+(i+1)>dp[j]) 12 dp[j]=dp[j-(i+1)]+(i+1);

hdu 3697 10 福州 现场 H - Selecting courses

Description A new Semester is coming and students are troubling for selecting courses. Students select their course on the web course system. There are n courses, the ith course is available during the time interval (A i,B i). That means, if you want