zoukankan      html  css  js  c++  java
  • HDOJ 4001To Miss Our Children Time解题报告

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=4001

    亚洲区预选赛大连赛区的网络赛题目,简单的DP,首先按照长度宽度和id值进行一遍排序,这一遍排序虽然保证不了在第i个前面的都是可以被第i个放到其上面的,但是保证了在第i个后面的都是不可以的。排序之后的dp[i]表示第i个放上之后的最优值。

    View Code
     1 #include<iostream>
     2 #include<cstring>
     3 #include<cstdio>
     4 #include<cstdlib>
     5 #define N 1005
     6 using namespace std;
     7 typedef long long LL;
     8 LL dp[N];
     9 struct node
    10 {
    11     LL len,wid,h,area;
    12     LL id;
    13 };
    14 node bl[N];
    15 int cmp(const void *a,const void *b)
    16 {
    17     node *c=(node *)a;
    18     node *d=(node *)b;
    19     if(c->len==d->len)
    20     {
    21         if(c->wid==d->wid)
    22         {
    23             if(c->id>d->id)
    24             return -1;
    25             else
    26             return 1;
    27         }
    28         else if(c->wid>d->wid)
    29         return 1;
    30         else
    31         return -1;
    32     }
    33     else if(c->len>d->len)
    34     return 1;
    35     else
    36     return -1;
    37 }
    38 int main()
    39 {
    40     LL n,i,j,xmax;
    41     LL a,b;
    42     while(scanf("%I64d",&n)&&n)
    43     {
    44         for(i=1;i<=n;i++)
    45         {
    46             scanf("%I64d%I64d%I64d%I64d",&a,&b,&bl[i].h,&bl[i].id);
    47             bl[i].len=a>b?a:b;
    48             bl[i].wid=a<b?a:b;
    49             bl[i].area=a*b;
    50         }
    51         qsort(bl+1,n,sizeof(node),cmp);
    52         for(i=1;i<=n;i++)
    53         dp[i]=bl[i].h;
    54         for(i=2;i<=n;i++)
    55         {
    56             xmax=0;
    57             if(bl[i].id==2)
    58             {
    59                 for(j=1;j<i;j++)
    60                 if(bl[j].len<bl[i].len&&bl[j].wid<bl[i].wid&&xmax<dp[j])
    61                 xmax=dp[j];
    62             }
    63             else if(bl[i].id==1)
    64             {
    65                 for(j=1;j<i;j++)
    66                 {
    67                     if(bl[j].len<=bl[i].len&&bl[j].wid<=bl[i].wid&&bl[j].area<bl[i].area&&xmax<dp[j])
    68                     xmax=dp[j];
    69                 }
    70             }
    71             else
    72             {
    73                 for(j=1;j<i;j++)
    74                 {
    75                     if(bl[j].len<=bl[i].len&&bl[j].wid<=bl[i].wid&&xmax<dp[j])
    76                     xmax=dp[j];
    77                 }
    78             }
    79             dp[i]=bl[i].h+xmax;
    80         }
    81         xmax=0;
    82         for(i=1;i<=n;i++)
    83         if(dp[i]>xmax)
    84         xmax=dp[i];
    85         printf("%I64d\n",xmax);
    86     }
    87     return 0;
    88 }
  • 相关阅读:
    1.BMap(百度地图)第二次加载显示不全
    SpringMVC的拦截器
    装饰者模式
    java产生随机数
    VS 常用快捷键
    给包含compid列且值为null ,表的行数据赋值--
    遍历数据库,删除包含指定列的表的行数据-
    DataTable select根据条件取值
    临时表汇总金额
    Redirect url 路径简单介绍
  • 原文地址:https://www.cnblogs.com/caozhenhai/p/2660379.html
Copyright © 2011-2022 走看看