zoukankan      html  css  js  c++  java
  • hdu 1160 FatMouse's Speed 解题报告

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1160

    题目意思:给出一堆老鼠,假设有 n 只(输入n条信息后Ctrl+Z)。每只老鼠有对应的weight 和 speed。现在需要从这 n 只老鼠的序列中,找出最长的一条序列,满足老鼠的weight严格递增,speed严格递减。

          我们可以用一个结构体来保存老鼠的信息,包括weight, speed 以及 id(这个 id 是未排序之前的,为了输出最后信息)。那么首先对 weight 进行递增排序,如果遇到相同的weight,就对speed进行递减排序。那么固定了weight,我们就可以着眼于对speed的处理,此时问题就变成求最长递减序列啦。由于要保存路径信息,代码用path[]来保存,递归输出即可。

          这条题目拖了好久啊,差不多一年了= =,太懒~~~

         

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstdlib>
     4 #include <cstring>
     5 #include <algorithm>
     6 using namespace std;
     7 
     8 const int maxn = 1000 + 10;
     9 
    10 struct node
    11 {
    12     int id;
    13     int weight, speed;
    14 }mouse[maxn];
    15 int path[maxn];
    16 int cnt[maxn];
    17 
    18 int cmp(node a, node b)
    19 {
    20     if (a.weight == b.weight)
    21         return a.speed > b.speed;
    22     return a.weight < b.weight;
    23 }
    24 
    25 void output(int pos)
    26 {
    27     if (!path[pos])
    28         return;
    29     output(path[pos]);
    30     printf("%d
    ", path[pos]);
    31 }
    32 
    33 int main()
    34 {
    35     int w, sp, len = 1;
    36     #ifndef ONLINE_JUDGE
    37         freopen("in.txt", "r", stdin);
    38     #endif
    39 
    40     while (scanf("%d%d", &w, &sp) != EOF)
    41     {
    42         mouse[len].weight = w;
    43         mouse[len].speed = sp;
    44         mouse[len].id = len;
    45         cnt[len++] = -1;
    46     }
    47     sort(mouse+1, mouse+len, cmp);
    48     for (int i = 1; i < len; i++)
    49     {
    50         int k = 0;
    51         for (int j = 1; j < i; j++)
    52         {
    53             if (mouse[j].speed > mouse[i].speed && mouse[j].weight < mouse[i].weight && k < cnt[j])
    54             {
    55                 k = cnt[j];
    56                 path[mouse[i].id] = mouse[j].id;
    57             }
    58         }
    59         cnt[i] = k;
    60         cnt[i]++;
    61     }
    62     int ansid, ans = -1;
    63     for (int i = 1; i < len; i++)
    64     {
    65         if (cnt[i] > ans)
    66         {
    67             ans = cnt[i];
    68             ansid = mouse[i].id;
    69         }
    70     }
    71     printf("%d
    ", ans);
    72     output(ansid);
    73     printf("%d
    ", ansid);
    74     return 0;
    75 }
  • 相关阅读:
    springmvc spring mybatis框架整合
    多线程bug修复
    OutOfMemory
    CSS中强悍的相对单位之em(em-and-elastic-layouts)学习小记
    css中line-height行高的深入学习
    HTML5的新语义化的标签
    关于Three.js基本几何形状
    【Google Chrome】 Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https, chrome-extension-resource问题解决
    模拟Bootstrap响应式网格系统
    关于我对写博客那些事儿的实用心得
  • 原文地址:https://www.cnblogs.com/windysai/p/4002128.html
Copyright © 2011-2022 走看看