zoukankan      html  css  js  c++  java
  • hdu 1677

    地址:http://acm.hdu.edu.cn/showproblem.php?pid=1677

    题意:俄罗斯套娃是一种有宽w和高h两种属性的玩具。当wi < wj && hi < hj的时候,套娃i能被套在套娃j里。现在给出m个套娃的宽和高,问最少能套出几个套娃。

    mark:首先按宽度从大到小排序,得到结果以后按高度求最长非降子序列(LIS)。这题和导弹拦截系统问题一样,是经典dp。

    一开始偷懒写了贪心结果TLE了。

    代码:

     1 # include <stdio.h>
     2 # include <stdlib.h>
     3 # include <string.h>
     4 
     5 
     6 typedef struct DOLL{
     7     int w, h ;
     8 }DOLL ;
     9 
    10 DOLL a[20010] ;
    11 int b [20010] ;
    12 int dp[10010] ;
    13 
    14 
    15 int cmp(const void *a, const void *b)
    16 {
    17     DOLL *p = (DOLL*)a, *q = (DOLL*)b ;
    18     if (p->w != q->w) return q->w - p->w ;
    19     return p->h - q->h ;
    20 }
    21 
    22 
    23 int LIS(int n)
    24 {
    25     int i, j, rtn = 0 ;
    26     memset (dp, 0, sizeof(dp)) ;
    27     for (i = 0 ; i < n ; i++)
    28     {
    29         for (j = 0 ; j < rtn ; j++)
    30             if (b[j] > b[i]) break ;
    31         if (j == rtn) rtn++ ;
    32         b[j] = b[i] ;
    33     }
    34     return rtn ;
    35 }
    36 
    37 
    38 int main ()
    39 {
    40     int T, i, j, n, ans, p ;
    41     scanf ("%d", &T) ;
    42     while (T--)
    43     {
    44         scanf ("%d", &n) ;
    45         for (i = 0 ; i < n ; i++)
    46             scanf ("%d%d", &a[i].w, &a[i].h) ;
    47         qsort(a, n, sizeof(DOLL), cmp) ;
    48         for ( i = 0 ; i < n ; i++)
    49             b[i] = a[i].h ; 
    50         printf ("%d\n", LIS(n)) ;
    51     }
    52     
    53     return 0 ;
    54 }
  • 相关阅读:
    package.json 笔记
    TypeScript 笔记
    RxJS 笔记
    angular 使用Redux
    ngrx 笔记
    Node 的使用
    imoocLinux环境变量配置文件笔记
    imooc正则表达式学习笔记
    js定时器和linux命令locate
    linux修改PATH环境
  • 原文地址:https://www.cnblogs.com/lzsz1212/p/2441671.html
Copyright © 2011-2022 走看看