洛谷P1233木棍加工
思路:
排序,l,w按照从大到小排列。然后递归寻找。(据说也可以用dp做)。
代码:
#include<bits/stdc++.h>
const int N=1e4+10;
const int mod=1e7+9;
const int maxn=0x3f3f3f3f;
const int minn=0xc0c0c0c0;
const int inf=99999999;
using namespace std;
struct wood
{
int l,w;
}a[N];
int p[N],n;
int cmp(wood x,wood y)
{
if(x.l==y.l)
return x.w>y.w;
else
return x.l>y.l;
}
void find(int l,int w,int x)
{
int i;
p[x]=1;
for(i=x+1;i<=n;i++)
if(l>=a[i].l && w>=a[i].w && !p[i])
{
find(a[i].l,a[i].w,i);
return;
}
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
int i,ans=0;
cin>>n;
for(i=1;i<=n;i++)
cin>>a[i].l>>a[i].w;
sort(a+1,a+n+1,cmp);
memset(p,0,sizeof(p));
for(i=1;i<=n;i++)
if(!p[i])
{
find(a[i].l,a[i].w,i);
ans++;
}
cout<<ans<<endl;
return 0;
}