【hdu2037】今年暑假不AC——贪心算法

毕竟是第一次用c++写题还是写篇blog记录一下。

题目在这里:点击打开链接

由于输入是乱序的,而一个节目固定有开始和结束时间,所以声明一个结构体,然后对结束时间排序,之后如果第i+1个的开始时间不小于第i个的结束时间,我们就能完整的看第i个节目,如果小于,那么就和第i+2个去比,以此类推。

题目很简单,接下来说说c++的事情。

首先最前面三行是新的信仰,cin直接给变量名就可以了不用记各种各样的占位符,但注意cin不接受常量,如果是字符的话需要声明变量用变量去做。

algorithm里面有各种各样的函数特别方便,可以不用手写快排惹,还有min max map什么的

注意sort用的时候,如果针对的不是命名空间内的变量类型,比如自己声明了一个结构体,那么就需要给他一个比较函数cmp来说明排序时参考的关键字。

#include 
#include 
using namespace std;

struct show
{
	int start;
	int end;
};

bool cmp(show a, show b)
{
	return a.end < b.end;
}

int main()
{
	int N = 0, count = 0, i = 0, temp = 0;
	show* show1;
	
	while (cin >> N, N)
	{
		count = 1;
		show1 = (show*)malloc(sizeof(show)*N);
		
		for (i = 0; i < N; i++)
			cin >> show1[i].start >> show1[i].end;
		sort(show1, show1 + N, cmp);
		
		temp = show1[0].end;
		for (i = 1; i < N; i++)
		{
			if (show1[i].start >= temp)
			{
				count++;
				temp = show1[i].end;
			}
		}
		cout << count << endl;
		
		free(show1);
	}
	
	return 0;
}


你可能感兴趣的:(题解心得,c语言,hdu,贪心算法)