心急的C小加:
先把所给的木棒按照长度从小到大排序,题目所求即转化为在排好的顺序中,求最长子序列的个数,每求一个标记一个,时间加1
#include <iostream>
#include <string.h>
#include <fstream>
#include <algorithm>
using namespace std;
struct mypair
{
int len;
int wgt;
};
bool cmp(const mypair& z1,const mypair& z2)
{
if(z1.len < z2.len)return true;
if(z1.len == z2.len && z1.wgt<z2.wgt)return true;
return false;
}
int main()
{
// ifstream cin("Chris.txt");
int ncase;
cin >> ncase;
while(ncase--)
{
int n;
cin >> n;
mypair zz[5001];
for(int i=0;i<n;i++)
{
cin >> zz[i].len >> zz[i].wgt;
}
int judge=0,vis[10001],count=0,p;
memset(vis,0,sizeof(vis));
sort(zz,zz+n,cmp);
while(judge<n)
{
count++;
int len=0,wgh=0;
for(p=0;p<n;p++)
{
if(vis[p]==0 && zz[p].len>=len && zz[p].wgt>=wgh)
{
len=zz[p].len;
wgh=zz[p].wgt;
vis[p]=1;
judge++;
}
}
}
cout << count << endl;
}
return 0;
}