NYOJ 16矩形ネスト(ベースdp+二分)


長方形のネスト
時間制限:
3000 ms|メモリ制限:
65535 KB難易度:
4
説明
長さと幅を表すn個の矩形があり、各矩形はa,bで記述することができる.矩形X(a,b)は、矩形Y(c,d)にネストすることができ、aのみ
入力
1行目は正の数Nである(0試験データのグループ毎の1行目は正の数nであり、このグループの試験データに矩形の個数が含まれていることを示す(n<=1000)
次のn行は、各行に2つの数a,b(0 しゅつりょくテストデータのセットごとに1つの数を出力し、最大条件を満たす矩形の数を表し、各グループの出力は1行を占めます。 サンプル入力 1 10 1 2 2 4 5 8 6 10 7 9 3 1 5 8 12 10 9 7 2 2 サンプル出力 5
//wa通りすがりの大物を求めてグループのデータにあげて、原因を指摘します
#include  
#include  
#include  

using namespace std;
int dp[1000 + 10], len;
struct rec
{
	int x;
	int y;
}a[1000 + 10];
int cmp(rec a, rec b)
{
	if (a.x == b.x)
		return a.y> 1;
		if (dp[mid] >= key)
			right = mid - 1;
		else
			left = mid + 1;
	}
	return left;//         
}

int main()
{
	int t, n;
	cin >> t;
	while (t--)
	{
		cin >> n;
		for (int i = 1; i <= n; i++)
		{
			scanf("%d%d", &a[i].x, &a[i].y);
			if (a[i].xa[i - 1].x)
k = 0;
if(a[i].x>a[i-1].x‖k==0)/x,yが  に より きい  にのみlenを  させる
{
if (len < tmp)
{
len = tmp;
k = 1;
}
dp[tmp] = a[i].y;
}
}
printf("%d", len);
}
return 0;
}

//n 2のアルゴリズム
//ac
#include
#include
#include
#include
using namespace std;
int dp[1000 + 20];
struct rec
{
	int x;
	int y;
}a[1000 + 20];
int cmp(rec a, rec b)
{
	if (a.x < b.x)
	return 1;
	if (a.x == b.x)
	return a.ya[j].y && a[i].x>a[j].x)
				{
					dp[i] = max(dp[i], dp[j] + 1);
				}	
			}
			ans = max(ans, dp[i]);
		}
		        /*
			for (int i = 0; i < n; i++)
		        {
			    dp[i] = 1;
			    for (int j = 0; j a[j].y && a[i].x>a[j].x)
				{
					dp[i] = max(dp[i], dp[j] + 1);
				}	
				ans = max(ans, dp[i]);//    ,   3  !!!!!//         ,         ?
			    }//         ,    。。。。
		        }
		        */
		printf("%d
", ans); } return 0; }