博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
FatMouse's Speed hdu 1160(动态规划,最长上升子序列+记录路径)
阅读量:5126 次
发布时间:2019-06-13

本文共 1171 字,大约阅读时间需要 3 分钟。

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

 

 

题意:现给出老鼠的体重与速度,要求你找出符合要求的最长子序列。

      要求是 W[m[1]] < W[m[2]] < ... < W[m[n]](体重) && S[m[1]] > S[m[2]] > ... > S[m[n]] (速度)

 

分析:有两个变量的话比较不好控制,自然需要先排序。再仔细思考的话,觉得和之前做的防御导弹有点类似,都是求最多能有几个符合条件的。思考到这,能       求出来了,然后再记录路径就可以了

 

 

#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;#define INF 0x3f3f3f3fconst int maxn = 4007;typedef long long LL;int a[maxn], dp[maxn];struct node{ int w, v, sign, h;}s[maxn];///按照体重从大到小的顺序排序,若体重相同,按照速度从小到大排序bool cmp(node p, node q){ if(p.w == q.w) return p.v
q.w;}int main(){ int k=1; while(scanf("%d %d", &s[k].w, &s[k].v)!=EOF) { s[k].h = k; s[k].sign = -1; k++; } sort(s+1, s+k+1, cmp); int ans = 0; for(int i=1; i
s[j].v) { if(dp[j]+1>=dp[i]) { dp[i] = dp[j]+1; s[i].sign = j;///标记路径 } } if(dp[i]>dp[ans]) ans = i; } } printf("%d\n", dp[ans]); while(s[ans].sign!=-1) { printf("%d\n", s[ans].h); ans = s[ans].sign; } printf("%d\n", s[ans].h); return 0;}
View Code

 

转载于:https://www.cnblogs.com/daydayupacm/p/5744298.html

你可能感兴趣的文章
Vulkan(1)用apispec生成Vulkan库
查看>>
python全栈开发中级班全程笔记(第三模块、第一章(1.面向对象基础))
查看>>
python全栈开发中级班全程笔记(第三模块、第一章(多态、封装、反射、内置方法、元类、作业))...
查看>>
python全栈开发中级班全程笔记(第三模块、第二章(网络编程))
查看>>
30分钟部署一个Kubernetes集群
查看>>
gitlab部署
查看>>
gitlab数据迁移
查看>>
samba安装配置
查看>>
redis数据备份还原
查看>>
centos7 dns(bind)安装配置
查看>>
Keepalived+LVS+nginx搭建nginx高可用集群
查看>>
CAA调试
查看>>
BZOJ3123[Sdoi2013]森林——主席树+LCA+启发式合并
查看>>
BZOJ3523[Poi2014]Bricks——贪心+堆
查看>>
Android 二维码 生成和识别(附Demo源码)
查看>>
查询sql server占用内存的情况
查看>>
react-01
查看>>
sublime插件安装
查看>>
SetForegroundWindow
查看>>
数据库存储系统应用,超市小票系统
查看>>