博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
NYOJ 16 嵌套矩形 DP
阅读量:6620 次
发布时间:2019-06-25

本文共 1469 字,大约阅读时间需要 4 分钟。

  题目链接: http://acm.nyist.net/JudgeOnline/problem.php?pid=16

  题意描述: 有n个矩形, 定义两个矩形能够嵌套的情况是, 长和宽同时小于另外一个矩形的长和宽或宽和长, 问最多能够嵌套多少个矩形?

  解题思路: 设G[i][j] 表示矩形i能不能够嵌套在矩形j中,d[i]表示以矩形i为起点的最长路径。 则状态转移方程为d[i] = max(d[i], dp[j]+1|G[i][j] == 1), 于是将这个问题转化成了有向图的最长路径问题。

  代码: 

#include 
#include
#include
#include
#include
#include
#include
using namespace std;const int MAXN = 1000+7;int G[MAXN][MAXN];struct Node { int x, y;};Node a[MAXN];int d[MAXN];int n;int dp( int i ) { // dp(i) 表示从i号矩形为起点出发的最长路径长度为dp(i) int & ans = d[i]; if( ans > 0 ) return ans; for( int j = 0; j < n; j++ ) { if( G[i][j] ) { ans = max( ans, dp(j)+1 ); } } return ans;}int main() { int T; while( ~scanf( "%d", &T ) ) { while( T-- ) { memset(G, 0, sizeof(G)); memset(a, 0, sizeof(a)); memset(d, 0, sizeof(d)); scanf( "%d", &n ); for( int i = 0; i < n; i++ ) { scanf( "%d%d", &a[i].x, &a[i].y ); } for( int i = 0; i < n; i++ ) { for( int j = 0; j < n; j++ ) { 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) ) { G[i][j] = 1; // i------->j } } }// for( int i = 0; i < n; i++ ) {// for( int j = 0; j < n; j++ ) {// cout << G[i][j] << " ";// }// cout << endl;// } int ans = 0; for( int i = 0; i < n; i++ ) { ans = max( ans, dp(i) ); } printf( "%d\n", ans + 1 ); } } return 0;}
View Code

  思考: 动态规划扔了有一段时间了啊.......

转载于:https://www.cnblogs.com/FriskyPuppy/p/7262780.html

你可能感兴趣的文章
curl带cookies采集
查看>>
Eclipse上GIT插件EGIT使用手册之十一_Fetch和Rebase
查看>>
在 IntelliJ IDEA中怎样设置把一个工程当lib给另一个工程用
查看>>
杭州链家房产信息分析
查看>>
电脑重启后蓝屏
查看>>
分享Kali Linux 2017年第11周镜像文件
查看>>
室内闪光灯初次尝试
查看>>
Java#HttpServletRequest
查看>>
secureCRT sz,rz的使用
查看>>
外观模式
查看>>
运维自动化工具ansible学习笔记
查看>>
Cookie利用神器之 CookieHacker
查看>>
flyway 使用
查看>>
linux性能
查看>>
hbase简介
查看>>
我的友情链接
查看>>
cacti 监控nginx mysql apache
查看>>
日本UX站点Uxmilk.jp对Mockplus的介绍 - 简洁快速的原型图设计工具Mockplu
查看>>
从物理执行角度透视Spark Job(23)
查看>>
网站首页我们该怎样布局
查看>>