(贪心)洛谷P1233木棍加工

洛谷P1233木棍加工

思路:

排序,l,w按照从大到小排列。然后递归寻找。(据说也可以用dp做)。

代码:

#include
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;
}

你可能感兴趣的:(基础算法)