题目来源:http://acm.hdu.edu.cn/showproblem.php?pid=1050
经典的贪心算法
有两点要注意的
第一点:按照开始的时间排序,开始的时候用结束时间来排序,结果确实不对,有些数据通不过,例如:
4
10 30
15 50
60 70
40 80
所以需要用开始的时间排序
第二点:需注意题目的意思,贴图:

仔细观察图,注意1 3 4 6这两个是不能同时进行的,这样就可以吧奇数的调整到下面的一排中,开始的时候没有注意,WR了几次
好好读题。。。
#include <iostream>
#include <string>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
struct T{
int start,end;
}a[210];
bool cmp(T a,T b){
if(a.start!=b.start)
return a.start<b.start;
}
int main (){
int Case,temp;
scanf("%d ",&Case);
while(Case--){
int mark[210]={0};
int n,sum=0;
scanf("%d",&n);
for(int i=0;i<n;i++) {
scanf("%d%d",&a[i].start,&a[i].end);
if(a[i].start>a[i].end)
temp=a[i].start,a[i].start=a[i].end,a[i].end=temp;
if(a[i].start%2==1) a[i].start++;
if(a[i].end%2==1) a[i].end++;
}
sort(a,a+n,cmp);
int j=n;
while(n>0){
int last=-1;
for(int i=0;i<j;i++)
if(a[i].start>last&&mark[i]==0)
mark[i]=1,n--,last=a[i].end;
sum++;
}
printf("%d\n",sum*10);
}
return 0;
}
浙公网安备 33010602011771号