题意:将木棍分堆,保证每堆木头的长度和重量都是非递减的,最少分几堆 。
解题思路:将木头按长度非递减排序,然后从第一个开始将重量能组成非递减的木棍分堆即可
#include <cstdio>
#include <algorithm>
using namespace std;
struct Stick
{
int l;
int w;
};
bool cmp(Stick& a, Stick& b)
{
if (a.l != b.l)
return a.l < b.l;
else
return a.w < b.w;
}
void main()
{
int T, n;
scanf("%d", &T);
while (T--)
{
scanf("%d", &n);
Stick* p = new Stick[n];
int* visited = new int[n];
memset(visited, 0, n*sizeof(int));
int N = n;
while (N--)
{
scanf("%d%d", &p[N].l, &p[N].w);
}
sort(p, p+n, cmp);
int sum = 0;
for (N = 0; N < n; ++N)
{
if (!visited[N])
{
visited[N] = 1;
sum++;
int l = p[N].l, w = p[N].w;
for (int j = N+1; j < n; ++j)
{
if (!visited[j] && p[j].w >= w)
{
visited[j] = 1;
l = p[j].l;
w = p[j].w;
}
}
}
}
printf("%d\n", sum);
delete[] p;
delete[] visited;
}
}