zoukankan      html  css  js  c++  java
  • HDU 1160 FatMouse's Speed

    半个下午,总算A过去了

    毕竟水题

    好歹是自己独立思考,debug,然后2A过的

    人人的dp算法

    题意:

    为了支持你的观点,你需要从给的数据中找出尽量多的数据,说明老鼠越重速度越慢这一论点

    本着“指针是程序员杀手”这一原则,我果断用pre来表示这只老鼠的直接前驱的序号

    代码中我是按体重从大到小排序,然后找出一条最长的体重严格递减速度严格递增的“链”(其实找到的是链尾)。

    然后输出的时候从后往前输出

    对结构体排序

    对于样例来说,循环完以后应该是这样的:

    order 2 3 4 8 1 5 7 0 6
    weight  500 1000 1100 2000 6000 6000 6000 6008 8000
    speed  2000 4000 3000 1900 2100 2000 1200 1300 1400
    lenth 1 1 2 3 3 3 4 4 4
    pre -1 -1 3 4 4 4 8 8 8

    pre == -1代表没有前驱。

     1 //#define LOCAL
     2 #include <iostream>
     3 #include <cstdio>
     4 #include <cstring>
     5 #include <algorithm>
     6 using namespace std;
     7 
     8 struct Mouse
     9 {
    10     int order;
    11     int weight;
    12     int speed;
    13     int pre;
    14     int lenth;
    15 }mice[1010];
    16 
    17 int a[1010];
    18 
    19 bool cmp1(Mouse a, Mouse b)
    20 {
    21     if(a.weight != b.weight)
    22         return (a.weight > b.weight);
    23     return (a.speed < b.speed);
    24 }
    25 
    26 bool cmp2(Mouse a, Mouse b)
    27 {
    28     return (a.order < b.order);
    29 }
    30 
    31 int main(void)
    32 {
    33     #ifdef LOCAL
    34         freopen("1160in.txt", "r", stdin);
    35     #endif
    36 
    37     int cnt = 0;
    38     int w, s;
    39     while(scanf("%d%d", &w, &s) == 2)
    40     {
    41         mice[cnt].weight = w;
    42         mice[cnt].speed = s;
    43         mice[cnt].order = cnt;
    44         ++cnt;
    45     }
    46 
    47     sort(mice, mice+cnt, cmp1);
    48     int i, j;
    49     for(i = 0; i < cnt; ++i)
    50     {
    51         mice[i].lenth = 1;
    52         mice[i].pre = -1;
    53     }
    54     //我为人人
    55     for(i = 1; i < cnt; ++i)
    56     {
    57         for(j = 0; j < i; ++j)
    58         {
    59             if(mice[j].weight > mice[i].weight 
    60                 && mice[j].speed < mice[i].speed
    61                 && mice[j].lenth+1 > mice[i].lenth)
    62             {
    63                 mice[i].lenth = mice[j].lenth + 1;
    64                 mice[i].pre = mice[j].order;
    65             }
    66         }
    67     }
    68 
    69     sort(mice, mice+cnt, cmp2);
    70     int maxlen = 0;
    71     for(i = 1; i < cnt; ++i)
    72         if(mice[i].lenth > mice[maxlen].lenth)
    73             maxlen = i;
    74     int l = mice[maxlen].lenth;
    75     printf("%d
    %d
    ", l, maxlen+1);
    76     
    77     int p = maxlen;
    78     for(i = 1; i < l; ++i)
    79     {
    80         printf("%d
    ", mice[p].pre+1);
    81         p = mice[p].pre;
    82     }
    83     return 0;
    84 }
    代码君
  • 相关阅读:
    SQLServer 时间差运算
    phpStudy
    解决Apache/PHP无法启动的问题
    apche的主配置文件)
    知识总结
    学完了js的知识,一起分享总结知识点
    JS的学习体会与分享
    SpringBoot -- pom.xml文件
    c++基本知识点
    c语言基本常识5
  • 原文地址:https://www.cnblogs.com/AOQNRMGYXLMV/p/3861083.html
Copyright © 2011-2022 走看看