poj 1065 贪心

类似于poj1328.

//============================================================================
//
// >     File        :    poj1065.cpp
// >     Author      :    flowertree
// >     Time        :    2015年11月16日
// >     Algorithm   :    单调递增子序列 贪心策略
//
//============================================================================

#include <iostream>
#include <string.h>
#include <stdio.h>
#include <algorithm>
using namespace std;

#define MAX 5005

struct node
{
	int a;
	int b;
};

node stick[MAX];
bool v[MAX];

bool cmp(node x, node y)
{
	if(x.a < y.a)
		return true;
	else if(x.a == y.a)
		return x.b < y.b ? true : false;
	return false;
}

int dp(int n)
{
	int num = 0;
	int sum = 0;
	int tempa, tempb;
	while(num != n)
	{
		sum++;
		for(int i = 0; i < n; i++)
			if(v[i] != true)
			{
				tempa = stick[i].a;
				tempb = stick[i].b;
				v[i] = true;
				num++;
				break;
			}
		for(int i = 0; i < n; i++)
		{
			if(v[i] != true && stick[i].a >= tempa && stick[i].b >= tempb)
			{
				num++;
				tempa = stick[i].a;
				tempb = stick[i].b;
				v[i] = true;
			}
		}
	}
	return sum;
}

int main()
{
	int m;
	int n;
	int sum;
	cin >> m;
	while(m--)
	{
		memset(v, false, sizeof(v));
		cin >> n;
		for(int i = 0; i < n; i++)
		{
			cin >> stick[i].a >> stick[i].b;
		}
		sort(stick, stick + n, cmp);
		sum = dp(n);
		cout << sum << endl;
	}
	system("pause");
	return 0;
}


你可能感兴趣的:(动态规划,poj)