POJ 1083 && HDU 1050 Moving Tables(贪心)

来源:互联网 发布:卞正伟淘宝店 编辑:程序博客网 时间:2024/05/21 05:58

Description
给出一些区间,让你每次从中选取一些互不相交的区间,让选择次数最少
Input
T组用例,每组用例第一行为区间个数N(N<=200),接下来N行每行两个整数分别为对应区间的左右端点
Output
对每组用例,输出最少次数
Sample Input
3
4
10 20
30 40
50 60
70 80
2
1 3
2 200
3
10 100
20 80
30 50
Sample Output
10
20
30
Solution
贪心
用数组room[401]记录每个房间前的走廊被用过多少次,则答案即为MAX(room[i])*10;每扫描一个点将数组这个范围内的值加1,注意,范围的确定,若下限为偶数,则下限需减一,若上限为奇数,则上限需加1
Code

#include<cstdio>#include<algorithm>using namespace std;int main() {    int T,n,l,r;    scanf("%d",&T);    while(T--)    {        int room[401];        for(int i=0;i<401;i++)//初始化             room[i]=0;        scanf("%d",&n);        for(int i=0;i<n;i++)        {            scanf("%d%d",&l,&r);            if(l>r) swap(l,r);            if(!(l&1)) l--;//下限为偶数则减一             if(r&1) r++;//上限为奇数则加一             for(int j=l;j<=r;j++)                room[j]++;        }        int ans=0;        for(int i=1;i<=400;i++)//找出最大room[i]值             if(room[i]>ans)                ans=room[i];        printf("%d\n",10*ans);    }    return 0;}
0 0
原创粉丝点击