您的位置:首页 > 其它

BZOJ 3359: [Usaco2004 Jan]矩形( dp )

2015-08-10 12:53 363 查看


数据范围这么小..怎么乱搞都可以吧...

先排序一遍然后O(n²) dp

------------------------------------------------------------------

#include<bits/stdc++.h> using namespace std; const int maxn = 109; struct R { int x, y; inline void Read() { scanf("%d%d", &x, &y); if(x < y) swap(x, y); } bool operator < (const R &o) const { return x > o.x || x == o.x && y > o.y; }} A[maxn]; int dp[maxn]; bool ok(int a, int b) { return A[a].x > A[b].x && A[a].y >= A[b].y || A[a].x >= A[b].x && A[a].y > A[b].y;} int main() { int N; cin >> N; for(int i = 0; i < N; i++) A[i].Read(); sort(A, A + N); for(int i = 0; i < N; i++) { dp[i] = 1; for(int j = 0; j < i; j++) if(ok(j, i)) dp[i] = max(dp[i], dp[j] + 1); } cout << *max_element(dp, dp + N) << "\n"; return 0;}-------------------------------------------------------------------

3359: [Usaco2004 Jan]矩形

Time Limit: 10 Sec Memory Limit: 128 MB
Submit: 11 Solved: 7
[Submit][Status][Discuss]

Description

给出N个矩形(1≤N≤100)和它的长和宽(不超过1000),写一个程序找出最大的K,使得有K个矩形满足层层包含的关系,即里层的矩形被所有外层的矩形包含.一个矩形P1包含另一个矩形P2,则P2的一边小于P1的一边,并且P9的另一边不超过P1的另一边.如果两个矩形相同,视为不包含.如2 x 1的矩形被2x2的矩形包含,不被1 x 2的矩形包含. 注意:矩形的顺序可以是任意的,且矩形可以旋转.

Input

第1行:整数N. 第2到N+1行:矩形的长和宽,均为整数.

Output

一行,输出最大的包含数K.

Sample Input

4
8 14
16 28
29 12
14 8

Sample Output

2

HINT

Source

Orange
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: