NYOJ-14 会场安排问题(贪心 区间覆盖)

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#define MAX 10000+1
#define IN 100000
using namespace std;

struct node{
	int left,right;
};

bool cmp_right(struct node a, struct node b){
	return a.right<b.right;
}

int main(){
	int T,n;
	int now_len,count,min,flag;
	struct node a[MAX];
	cin>>T;
	while(T--){
		cin>>n;
		for(int i=0;i<n;i++){
			cin>>a[i].left>>a[i].right;
		}
	    sort(a,a+n,cmp_right);

	    now_len=0;
	    count=0;
	    flag=1;
	    int k=0;
	    while(1){
	    	min=IN;
	    	for(int j=0;j<n;j++){
	    		if(a[j].left>now_len){
	    		if((a[j].right-now_len)< min) {
	    			min=a[j].right-now_len;
				}
			}
			}
			if(min==IN){
				break;
			}
			else{
				count++;
				now_len+=min;
			}
		}
		cout<<count<<endl;
	} 
	return 0;
}
千万不要写成for(int j=0;j<n&&a[j].left>now_len;j++) 因为for循环的第二部分不满足的话就直接退出循环而不是j自增再循环一遍,被坑了好久
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值