题目链接: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[]来保存,递归输出即可。

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

 #include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
using namespace std; const int maxn = + ; struct node
{
int id;
int weight, speed;
}mouse[maxn];
int path[maxn];
int cnt[maxn]; int cmp(node a, node b)
{
if (a.weight == b.weight)
return a.speed > b.speed;
return a.weight < b.weight;
} void output(int pos)
{
if (!path[pos])
return;
output(path[pos]);
printf("%d\n", path[pos]);
} int main()
{
int w, sp, len = ;
#ifndef ONLINE_JUDGE
freopen("in.txt", "r", stdin);
#endif while (scanf("%d%d", &w, &sp) != EOF)
{
mouse[len].weight = w;
mouse[len].speed = sp;
mouse[len].id = len;
cnt[len++] = -;
}
sort(mouse+, mouse+len, cmp);
for (int i = ; i < len; i++)
{
int k = ;
for (int j = ; j < i; j++)
{
if (mouse[j].speed > mouse[i].speed && mouse[j].weight < mouse[i].weight && k < cnt[j])
{
k = cnt[j];
path[mouse[i].id] = mouse[j].id;
}
}
cnt[i] = k;
cnt[i]++;
}
int ansid, ans = -;
for (int i = ; i < len; i++)
{
if (cnt[i] > ans)
{
ans = cnt[i];
ansid = mouse[i].id;
}
}
printf("%d\n", ans);
output(ansid);
printf("%d\n", ansid);
return ;
}

最新文章

  1. ACM集训的1B。。。。黑色星期五。。。。2333333
  2. EXTJS动态改变store的proxy的params
  3. 工作的思考十七:工作中容易犯的错误 - Delay
  4. java.lang.NoClassDefFoundError: org/springframework/context/ApplicationContext
  5. &lt;转&gt;十分钟学会javascript
  6. Eclipse 引导阮卓项目 No projects are found to import解
  7. 使用hubuild,mui开发微信app—首页(一)
  8. Inception体验之安装
  9. Delphi连接MySql(待测试验证,使用mysql.pas未通过)
  10. java8中optional和.stream().map()
  11. Kubernetes之Controllers三
  12. HyperServer 中的 SSL 支持
  13. 游程编码(Run Length Code)
  14. Linux中断的系统调用
  15. Unity 各个组件参数总结
  16. linux添加PYTHONPATH环境变量
  17. SQL ser 进行表中的插入操作时,变量字段名,导致报错时解决办法 :动态SQL
  18. 【arc073D】Many Moves
  19. [HNOI2008]玩具装箱
  20. java中时间

热门文章

  1. Linux文件权限;ACL;Setuid、Setgid、Stick bit特殊权限;sudo提权
  2. [IOS SQLITE的使用方式]
  3. python中对字典按照value排序
  4. A.2 Main
  5. C#实现eval 进行四则运算
  6. IF IE
  7. CSS transition 过渡 详解
  8. zabbix 分布式监控(proxy)源码安装
  9. C语言计算任意数的任意次方
  10. ASP.NET版Memcached监控工具(转载)