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 }
  • 相关阅读:
    php openssl 加密解密
    PHP中进制之间的互相转换
    零基础学习FFMPEG
    git 强制更新本地和强制提交覆盖
    mysql 不常用备忘
    mysql <=> null 问题
    GD库imagettftext中文乱码的问题
    flex布局设置width无效
    下拉菜单css
    swagger:API在线文档自动生成框架
  • 原文地址:https://www.cnblogs.com/lzsz1212/p/2441671.html
Copyright © 2011-2022 走看看