解题思路:(贪心算法 + 动态规划——单调递增子序列)
1.首先将木棒排序,总体为l递增排序,若l相等,则w递增。
2.对第i个木棒处理:选出单调递增子序列,并将单调递增子序列标记为1(使用过)。选出后,时间+1.进行第i+1个木棒的处理
参考了@飘过的小牛的解题思路 ,附我自己的代码。不懂请看这篇博文http://blog.youkuaiyun.com/niushuai666/article/details/6419922
#include <iostream>
#include <algorithm>
#include <cstring>
typedef struct
{
int l,w;
} wood;
using namespace std;
bool cmp(wood a,wood b)
{
if(a.l==b.l) return a.w<b.w;
else return a.l<b.l;
}
int main()
{
int T;
cin>>T;
while(T--)
{
int n;
cin>>n;
wood W[5005],last;
int used[5005];
memset(used,0,sizeof(used));
for(int i=0; i<n; i++)
cin>>W[i].l>>W[i].w;
sort(W,W+n,cmp);
int cnt=0;
for(int i=0; i<n; i++)
{
last.w=W[i].w;
if(!used[i])
{
for(int j=i+1; j<n; j++)
if(!used[j]&&last.w <= W[j].w )
{
used[j]=1;
last.w=W[j].w;
}
cnt++;
}
}
cout<<cnt<<endl;
}
return 0;
}