DAG 矩形覆盖

题面

这是紫书上的一道例题

        有n个矩形,每个矩形可以用a,b来描述,表示长和宽。矩形X(a,b)可以嵌套在矩形Y(c,d)中当且仅当a

思路

        对于本题中的n个矩形,以每个矩形作为一个点,若X矩形能嵌套在Y矩形中,则从X向Y连一条边,题目则变为了在DAG中求最长路径的问题。对每一个矩形i,设d(i)为矩形i结尾的最长链的长度,那么d(i)=Max{0,d(j)(矩形j可以嵌套在矩形i中)+1};

代码

#include
using namespace std;
int n,a[1002],b[1002],ans,dp[1002];
bool d[1002][1022];
int dop(int cnt){//记搜找最长的路径
	if(dp[cnt]>0)return dp[cnt];int temp=1;
	for(register int i=1;i<=n;i++)
	  if(d[cnt][i])temp=max(temp,dop(i)+1);		
	return dp[cnt]=temp;
}
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++)cin>>a[i]>>b[i];
	for(int i=1;i<=n;i++)
	  for(int l=1;l<=n;l++)
	    if((a[i]

总结

难点主要在于是否能将实际转换成DAG(有向无环图)一个模型

然后注意记搜的细节

 

你可能感兴趣的:(动态规划,DAG)