码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-08-10 13:19:50      阅读:102      评论:0      收藏:0      [点我收藏+]

标签:

技术分享

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

先排序一遍然后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

 

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

标签:

原文地址:http://www.cnblogs.com/JSZX11556/p/4717692.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!