首页 > 代码库 > 经典DP 嵌套矩形 (南洋理工ACM—16)
经典DP 嵌套矩形 (南洋理工ACM—16)
本来是个很水的DP,结果被自己的代码习惯给打败了
代码:
1 #include<iostream> 2 #include<stdlib.h> 3 #include<string.h> 4 5 using namespace std; 6 7 typedef struct rectangle 8 { 9 int x;10 int y;11 }Rectangle;12 13 Rectangle a[1002];14 int map[1002][1002];15 int d[1002];16 int N;17 18 19 int dp(int t)20 {21 int &ans = d[t];22 if(ans>=0)23 return ans;24 int max=0;25 for(int i=0; i<N;i++)26 {27 if(map[t][i]==1)28 {29 if(max<dp(i))30 max = dp(i);31 }32 }33 return d[t] = max+1;34 }35 36 37 int main()38 {39 int T;40 cin>>T;41 while(T--)42 {43 memset(d,-1,sizeof(d));44 cin>>N;45 for(int i=0; i<N;i++)46 {47 cin>>a[i].x>>a[i].y;48 }49 //构图50 memset(map,0,sizeof(map));51 for(int i=0; i<N; i++)52 {53 for(int j=0; j<N; j++)54 {55 if((a[i].x>a[j].x&&a[i].y>a[j].y)||(a[i].y>a[j].x&&a[i].x>a[j].y))56 map[i][j]=1;57 }58 }59 int max=0;60 for(int i=0; i<N; i++)61 {62 if(dp(i)>max)63 max = dp(i);64 }65 cout<<max<<endl;66 }67 return 0;68 }
d[]用来实现记忆化搜索,记忆化搜索是这个题的关键,几乎所有的DP都需要记忆化搜索,记忆化搜索是个非常好的技巧。另外map的构建。
经典DP 嵌套矩形 (南洋理工ACM—16)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。