题目链接

http://acm.hdu.edu.cn/showproblem.php?pid=1160

题意

给出一系列的 wi si

要找出一个最长的子序列 满足

wi 是按照升序排列的

si 是按照 降序排列的

思路

因为有双关键词

我们 可以先将一关键词 比如 W 按照 升序排序

再根据 S 关键词 来找 最长下降子序列 就可以了

要输出 其中的一个子序列 我们只要 记录 其 父节点就可以

再循环网上找

AC代码

  1. #include <cstdio>
  2. #include <cstring>
  3. #include <ctype.h>
  4. #include <cstdlib>
  5. #include <cmath>
  6. #include <climits>
  7. #include <ctime>
  8. #include <iostream>
  9. #include <algorithm>
  10. #include <deque>
  11. #include <vector>
  12. #include <queue>
  13. #include <string>
  14. #include <map>
  15. #include <stack>
  16. #include <set>
  17. #include <list>
  18. #include <numeric>
  19. #include <sstream>
  20. #include <iomanip>
  21. #include <limits>
  22. #define CLR(a, b) memset(a, (b), sizeof(a))
  23. #define pb push_back
  24. using namespace std;
  25. typedef long long ll;
  26. typedef long double ld;
  27. typedef unsigned long long ull;
  28. typedef pair <int, int> pii;
  29. typedef pair <ll, ll> pll;
  30. typedef pair<string, int> psi;
  31. typedef pair<string, string> pss;
  32. const double PI = acos(-1.0);
  33. const double E = exp(1.0);
  34. const double eps = 1e-8;
  35. const int INF = 0x3f3f3f3f;
  36. const int maxn = 1e3 + 5;
  37. const int MOD = 1e9 + 7;
  38. struct node
  39. {
  40. int w, s;
  41. int id;
  42. }q[maxn];
  43. bool comp(node x, node y)
  44. {
  45. if(x.w == y.w)
  46. return x.s > y.s;
  47. return x.w < y.w;
  48. }
  49. int dp[maxn];
  50. int pre[maxn];
  51. int main()
  52. {
  53. int pos = 1;
  54. while (~scanf("%d%d", &q[pos].w, &q[pos].s))
  55. q[pos].id = pos++;
  56. sort(q, q + pos, comp);
  57. int ans = 1;
  58. CLR(dp, 0);
  59. CLR(pre, 0);
  60. for (int i = 1; i <= pos; i++)
  61. {
  62. dp[i] = 1;
  63. for (int j = 1; j < i; j++)
  64. {
  65. if (q[i].s < q[j].s && q[i].w > q[j].w)
  66. {
  67. if (dp[j] + 1 > dp[i])
  68. {
  69. dp[i] = dp[j] + 1;
  70. pre[i] = j;
  71. }
  72. }
  73. }
  74. ans = max(ans, dp[i]);
  75. }
  76. printf("%d\n", ans);
  77. vector <int> v;
  78. for (int i = 1; i <= pos; i++)
  79. {
  80. if (dp[i] == ans)
  81. {
  82. int vis = i;
  83. v.pb(q[vis].id);
  84. while (pre[vis])
  85. {
  86. v.pb(q[pre[vis]].id);
  87. vis = pre[vis];
  88. }
  89. break;
  90. }
  91. }
  92. vector <int>::iterator it;
  93. for (it = v.end(), it--; ; it--)
  94. {
  95. printf("%d\n", *it);
  96. if (it == v.begin())
  97. break;
  98. }
  99. }

HDU - 1160 FatMouse's Speed 【DP】的更多相关文章

  1. HDU 1160 FatMouse's Speed LIS DP

    http://acm.hdu.edu.cn/showproblem.php?pid=1160 同样是先按它的体重由小到大排,相同就按speed排就行. 这样做的好处是,能用O(n^2)枚举,因为前面的 ...

  2. HDU 1160 FatMouse's Speed (sort + dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1160 给你一些老鼠的体重和速度,问你最多需要几只可以证明体重越重速度越慢,并输出任意一组答案. 结构体 ...

  3. HDU 1160 FatMouse's Speed(DP)

    点我看题目 题意 :给你好多只老鼠的体重和速度,第 i 行代表着第 i 个位置上的老鼠,让你找出体重越大速度越慢的老鼠,先输出个数,再输出位置. 思路 :看题的时候竟然脑子抽风了,看了好久愣是没明白题 ...

  4. hdu 1078 FatMouse and Cheese【dp】

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1078 题意:每次仅仅能走 横着或竖着的 1~k 个格子.求最多能吃到的奶酪. 代码: #include ...

  5. HDU 1160 FatMouse's Speed ——(DP)

    又是那个lis变形的题目. 但是不好定义严格的比较符号,因此只能n^2去做.值得注意的一个是要先排序,因为可能可以先选后面的再选前面的,先排序的话就能够避免这个问题.但是要注意,因为要输出路径,所以要 ...

  6. 【最长上升子序列记录路径(n^2)】HDU 1160 FatMouse's Speed

    https://vjudge.net/contest/68966#problem/J [Accepted] #include<iostream> #include<cstdio> ...

  7. HDU 1160 FatMouse's Speed (DP)

    FatMouse's Speed Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Su ...

  8. HDU 1160 FatMouse's Speed(要记录路径的二维LIS)

    FatMouse's Speed Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  9. HDU 1160 FatMouse's Speed (动态规划、最长下降子序列)

    FatMouse's Speed Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

随机推荐

  1. Failed to fetch URL http://dl-ssl.google.com/android/repository/repository.xml, reason:

    Failed to fetch URL http://dl-ssl.google.com/android/repository/repository.xml, reason: Connection t ...

  2. mysql忘记密码的解决办法

    mysql忘记密码时,需要重设密码. 在Windows下的操作如下: 1.关闭正在运行的MySQL. 2.打开DOS窗口,转到mysql\bin目录. 3.输入mysqld --skip-grant- ...

  3. 传输层:TCP 协议

    传输层:TCP 协议 一.概述 TCP 和 UDP 处在同一层——运输层,但是它们有很多的不同.TCP 是 TCP/IP 系列协议中最复杂的部分,它具有以下特点: (1) TCP 提供 可靠的 数据传 ...

  4. 卷积 convolution

    这东西大学学过,然后我忘记了,后来就只记得这个名字了. https://zh.wikipedia.org/wiki/%E5%8D%B7%E7%A7%AF http://www.guokr.com/po ...

  5. Openfire 4.1.2 DOWNLOADS

    DOWNLOADS  Source Code Openfire 4.1.2 http://www.igniterealtime.org/downloads/ http://download.ignit ...

  6. SQL EXISTS 与 IN

    EXISTS用于检查子查询是否至少会返回一行数据,该子查询实际上并不返回任何数据,而是返回值True或FalseEXISTS 指定一个子查询,检测行的存在. EXISTS与IN的使用效率的问题,通常情 ...

  7. Redis主从同步分析

    一.Redis主从同步原理1.1 Redis主从同步的过程配置好slave服务器连接的master后,slave会建立和master的连接,然后发送sync命令.无论是第一次同步建立的连接还是连接断开 ...

  8. Linux远程无密码登陆并远程执行脚本

    假设 A (192.168.20.59)为客户机器,B(192.168.20.60)为目标机: 要达到的目的: A机器ssh登录B机器无需输入密码: 加密方式选 rsa|dsa均可以,默认dsa ss ...

  9. Java 嵌套类和内部类演示样例&lt;二&gt;

    嵌套类(nested class)是一个在还有一个类或接口内部声明的类. 嵌套类分为两种:静态内部类(static inner class)和非静态嵌套类(non-static nested clas ...

  10. 写一段代码,判断一个包括'{','[','(',')',']','}'的表达式是否合法(注意看样例的合法规则。) 给定一个表达式A,请返回一个bool值,代表它是否合法。

    这道题比较奇怪,它的匹配规则并不是我们平时想想的那种匹配规则,例如:平时的匹配规则是().{}.[]才能匹配,本题中(和} .].)都能匹配.所以做题时要好好审题.另外,本题中给的测试用例是错误的. ...