hdu 1677
2012-04-11 02:42
330 查看
地址:http://acm.hdu.edu.cn/showproblem.php?pid=1677
题意:俄罗斯套娃是一种有宽w和高h两种属性的玩具。当wi < wj && hi < hj的时候,套娃i能被套在套娃j里。现在给出m个套娃的宽和高,问最少能套出几个套娃。
mark:首先按宽度从大到小排序,得到结果以后按高度求最长非降子序列(LIS)。这题和导弹拦截系统问题一样,是经典dp。
一开始偷懒写了贪心结果TLE了。
代码:
题意:俄罗斯套娃是一种有宽w和高h两种属性的玩具。当wi < wj && hi < hj的时候,套娃i能被套在套娃j里。现在给出m个套娃的宽和高,问最少能套出几个套娃。
mark:首先按宽度从大到小排序,得到结果以后按高度求最长非降子序列(LIS)。这题和导弹拦截系统问题一样,是经典dp。
一开始偷懒写了贪心结果TLE了。
代码:
# include <stdio.h> # include <stdlib.h> # include <string.h> typedef struct DOLL{ int w, h ; }DOLL ; DOLL a[20010] ; int b [20010] ; int dp[10010] ; int cmp(const void *a, const void *b) { DOLL *p = (DOLL*)a, *q = (DOLL*)b ; if (p->w != q->w) return q->w - p->w ; return p->h - q->h ; } int LIS(int n) { int i, j, rtn = 0 ; memset (dp, 0, sizeof(dp)) ; for (i = 0 ; i < n ; i++) { for (j = 0 ; j < rtn ; j++) if (b[j] > b[i]) break ; if (j == rtn) rtn++ ; b[j] = b[i] ; } return rtn ; } int main () { int T, i, j, n, ans, p ; scanf ("%d", &T) ; while (T--) { scanf ("%d", &n) ; for (i = 0 ; i < n ; i++) scanf ("%d%d", &a[i].w, &a[i].h) ; qsort(a, n, sizeof(DOLL), cmp) ; for ( i = 0 ; i < n ; i++) b[i] = a[i].h ; printf ("%d\n", LIS(n)) ; } return 0 ; }
相关文章推荐
- HDU 1677 Nested Dolls
- HDU 1677 Nested Dolls
- HDU 1677
- HDU 1677 Nested Dolls (贪心)
- hdu----(1677)Nested Dolls(DP/LIS(二维))
- HDU 1677 Nested Dolls
- hdu 1677 Nested Dolls
- HDU - 1677Nested Dolls最长上升子序列变式
- HDU 1677 Nested Dolls(排序+二分)
- hdu 1677 pku3636
- hdu 1677 Nested Dolls LIS + 动态规划
- UVA 11368 & POJ 3636 & HDU 1677 Nested Dolls(贪心 + 二分LIS)
- hdu 1677 Nested Dolls 子串
- 【HDU 1275 && HDU 1677】 两题类似,经典 DP。
- hdu 1677 Nested Dolls【贪心解嵌套娃娃问题】
- hdu 1677 Nested Dolls【贪心解嵌套娃娃问题】
- HDU 1677 LIS
- hdu 1677 Nested Dolls (Greedy + Treap)
- hdu 1677 (dp)
- HDU 1677 Nested Dolls