码迷,mamicode.com
首页 > 其他好文 > 详细

HDU 1160 FatMouse's Speed

时间:2014-07-22 22:45:52      阅读:220      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   os   数据   

半个下午,总算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代表没有前驱。

bubuko.com,布布扣
 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\n%d\n", l, maxlen+1);
76     
77     int p = maxlen;
78     for(i = 1; i < l; ++i)
79     {
80         printf("%d\n", mice[p].pre+1);
81         p = mice[p].pre;
82     }
83     return 0;
84 }
代码君

HDU 1160 FatMouse's Speed,布布扣,bubuko.com

HDU 1160 FatMouse's Speed

标签:style   blog   http   color   os   数据   

原文地址:http://www.cnblogs.com/AOQNRMGYXLMV/p/3861083.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!