FatMouse's Speed hdu 1160(动态规划,最长上升子序列+记录路径)
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 <iostream> #include <stdio.h> #include <string.h> #include <string> #include <vector> #include <algorithm> #include <map> #include <queue> #include <stack> #include <math.h>using namespace std;#define INF 0x3f3f3f3f const 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.v;return p.w>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<k; i++){dp[i] = 1;///不管怎样,它本身都符合条件,也就是它自己1个for(int j=1; j<i; j++){if(s[i].w<s[j].w && s[i].v>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
FatMouse's Speed hdu 1160(动态规划,最长上升子序列+记录路径)相关推荐
- 动态规划—最长公共子序列问题 HDU-1159 Common Subsequence
动态规划-最长公共子序列问题 Common Subsequence [ HDU - 1159 ] A subsequence of a given sequence is the given sequ ...
- 详解动态规划最长公共子序列--JavaScript实现
前面两篇我们讲解了01背包问题和最少硬币找零问题.这篇将介绍另一个经典的动态规划问题--最长公共子序列.如果没看过前两篇,可点击下面链接. 详解动态规划最少硬币找零问题--JavaScript实现 详 ...
- 动态规划1--最长公共子序列
动态规划1--最长公共子序列 一.动态规划 经常会遇到复杂问题不能简单地分解成几个子问题,而会分解出一系列的子问题.简单地采用把大问题分解成子问题,并 综合子问题的解导出大问题的解的方法,问题求解耗时 ...
- 动态规划——最长上升子序列问题(LIS)
动态规划--最长上升子序列问题(LIS) 最长上升子序列问题(LIS).给定n个整数A1,A2,-,AnA_1, A_2, \dots , A_n,按从左到右的顺序选出尽量多的整数,组成一个上升子序列 ...
- 最长公共子序列php,动态规划(最长公共子序列LCS)
概念 求解决策过程最优化的结果 (可能有多个) 把多阶段过程转化为一系列单阶段过程,利用各阶段之间的关系,逐个求解 计算过程中会把结果都记录下,最终结果在记录中找到. 举例 求两个字符串的最长公共子序 ...
- c语言最长公共子序列,算法设计与分析/动态规划——最长公共子序列LCS及模板...
这位大佬写的对理解DP也很有帮助,我就直接摘抄过来了,代码部分来自我做过的题 一,问题描述 给定两个字符串,求解这两个字符串的最长公共子序列(Longest Common Sequence).比如字符 ...
- 最长公共子序列动态规划c语言,动态规划----最长公共子序列(C++实现)
最长公共子序列 题目描述:给定两个字符串s1 s2 - sn和t1 t2 - tm .求出这两个字符串的最长公共子序列的长度.字符串s1 s2 - sn的子序列指可以表示为 - { i1 < i ...
- (动态规划 最长有序子序列)Monkey and Banana --HDU --1069
链接: http://acm.hdu.edu.cn/showproblem.php?pid=1069 http://acm.hust.edu.cn/vjudge/contest/view.action ...
- 动态规划--最长公共子序列
1. 子序列 摘自维基百科 在数学中,某个序列的子序列是从最初序列通过去除某些元素但不破坏余下元素的相对位置而形成的新序列. 例如: 令 为一序列 那么,以下序列 是 的子序列之一.对应定义里的自然数 ...
最新文章
- javascript解析json
- ios开发国外视频教程(有翻译)
- byte 类型比较_C++数据类型回顾
- 赶集网人事调整:三月内两副总离职
- TortoiseGit 将工作区变动文件提交本地仓库_入门试炼_04
- Photoshop通道抠出散乱的儿童头发
- jupyter的常用操作——Python学习(二)
- 苹果亮度自动调节怎么关闭_iPhone 总是自动亮屏,该怎么关闭?
- Ubuntu下WPS 快捷键、使用方法总结
- Air780E模块PPP应用开发指南
- 今日学习在线编程题:小码哥的序列
- 微信 获取 用户信息访问授权管理
- matter设备调试(Device Commissioning):
- 黑马程序员——java语言基础部分——网络编程
- 2022最新圣诞节代码:圣诞树
- 大小不一样的图片随着盒子大小自适应
- Ubuntu搭建团队文档协作在线平台
- 因为你是我的英雄音译_我可以成为你的英雄宝贝
- Leetcode 2327. Number of People Aware of a Secret [Python]
- iOS开发之iOS10简单适配
热门文章
- cmd oracle sys登录_oracle忘记sys/system/scott用户密码的解决方法
- 乔治敦大学计算机专业排名,2020USNEWS数据科学与分析专业综合排名(上)
- 【python+selenium自动化】使用pytest+allure2完成自动化测试报告的输出
- 大型网络架构变迁和知识图谱
- 35款让你爱不释手的网页元素PSD素材
- 如何将函数的实际参数转换成数组
- 7怎样设置禁网_怎样才能提升网站内页的收录?
- android 屏幕横竖屏切换时生命周期运行详解,创建横屏layout,has no declaration in the base
- Mongoose provide access to previous value of property in pre('save')
- js Ajax跨域访问