题意:给定一些木棒,已知长度和质量,需要一个机器处理这些木棒,机器开启的时候需要耗费一个单位的时间,如果第i+1个木棒的重量和长度都大于等于第i个处理的木棒,那么将不会耗费时间,否则需要消耗一个单位的时间。
分析:贪心,求非减子序列的数量。。。先按长度递增排序,如果长度一致就按重量递增排序。按顺序扫一遍,从没标记的开始扫,将扫过的木棒标记,扫完所有木棒。
#include<cstdio>
#include<algorithm>
#include<cstring>
#define MAX_N 5005
using namespace std;
struct node
{
int l,w;
bool used;
}s[MAX_N];
bool comp(const node a,const node b)
{
if(a.l==b.l)
return a.w<b.w;
else
return a.l<b.l;
}
int main(void)
{
int n;
int t;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d%d",&s[i].l,&s[i].w);
s[i].used=false;
}
sort(s,s+n,comp);
int sum=0;
for(int i=0;i<n;i++)
{
if(!s[i].used)
{
sum++;
s[i].used=true;
int t=s[i].w;
for(int j=i+1;j<n;j++)
{
if(!s[j].used&&s[j].w>=t)
{
s[j].used=true;
t=s[j].w;
}
}
}
}
printf("%d\n",sum);
}
return 0;
}