(最长上升子序列 并记录过程)FatMouse's Speed -- hdu -- 1160
http://acm.hdu.edu.cn/showproblem.php?pid=1160
FatMouse's Speed
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 12338 Accepted Submission(s): 5405
Special Judge
The data for a particular mouse will consist of a pair of integers: the first representing its size in grams and the second representing its speed in centimeters per second. Both integers are between 1 and 10000. The data in each test case will contain information for at most 1000 mice.
Two mice may have the same weight, the same speed, or even the same weight and speed.
W[m[1]] < W[m[2]] < ... < W[m[n]]
and
S[m[1]] > S[m[2]] > ... > S[m[n]]
In order for the answer to be correct, n should be as large as possible.
All inequalities are strict: weights must be strictly increasing, and speeds must be strictly decreasing. There may be many correct outputs for a given input, your program only needs to find one.
- #include<iostream>
- #include<stdio.h>
- #include<string.h>
- #include<stdlib.h>
- #include<algorithm>
- using namespace std;
- #define N 10005
- #define oo 0x3f3f3f3f
- /**
- 感觉有点用导弹防御的思想
- 每次记录从 0 到 i 的最长个数
- 并用 pre[i] 记录 i 点是从哪个点过来的
- **/
- /// number 是记录它原来的位置
- struct node
- {
- int w, s, number;
- }a[N];
- /// pre[] 是个很好的记录方式,可以记录它的是从哪个过来的(它的上一步)
- int dp[N], pre[N];
- /// 先按 w 从小到大排, 再按 s 从大到小排
- int cmp(node n1, node n2)
- {
- if(n1.w!=n2.w)
- return n1.w < n2.w;
- return n1.s > n2.s;
- }
- int main()
- {
- int i=, j, n;
- memset(a, , sizeof(a));
- memset(dp, , sizeof(dp));
- while(scanf("%d%d", &a[i].w, &a[i].s)!=EOF)
- {
- a[i].number = i;
- i++;
- }
- n=i;
- sort(a+, a+i+, cmp);
- /**
- for(i=1; i<n; i++)
- printf("%d %d %d\n", a[i].number, a[i].w, a[i].s);
- **/
- for(i=; i<n; i++)
- {
- pre[i] = i;
- dp[i] = ;
- for(j=; j<i; j++)
- {
- if(a[i].w!=a[j].w && a[i].s<a[j].s)
- {
- if(dp[i]<dp[j]+)
- {
- pre[i] = j;
- dp[i] = dp[j] + ;
- }
- }
- }
- }
- int Max=-oo, index=;
- for(i=; i<n; i++)
- {
- if(dp[i]>Max)
- {
- Max = dp[i];
- index = i;
- }
- }
- printf("%d\n", Max);
- i=;
- int b[N]={};
- while(pre[index]!=index)
- {
- b[i++] = a[index].number;
- index = pre[index];
- }
- printf("%d\n", a[index].number);
- for(j=i-; j>=; j--)
- printf("%d\n", b[j]);
- return ;
- }
(最长上升子序列 并记录过程)FatMouse's Speed -- hdu -- 1160的更多相关文章
- FatMouse's Speed HDU - 1160 最长上升序列, 线性DP
#include<cstdio> #include<cstdlib> #include<cstring> #include<algorithm> usi ...
- ZOJ 1108 FatMouse's Speed (HDU 1160) DP
传送门: ZOJ:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=108 HDU :http://acm.hdu.edu.cn/s ...
- HDU - 1160 最长上升子序列以及记录路径
题意:第一列,给出老鼠的重量,第二列,给出老鼠的速度,要证明老鼠的重量越大,速度越小,给出最多老鼠的数量,并说明第几只. 思路:先将老鼠按照重量从大到小排序,然后速度是从小到大,求最长上升子序列,学习 ...
- CSU 1225 最长上升子序列并记录其个数
;j<i;j++){ if(h[i] > h[j]){ ) cnt[i]+=cnt[j]; ) len[i] = len[j] + , cnt[i] = cnt[j]; } //身高相同的 ...
- - > 动规讲解基础讲解七——最长单增子序列
(LIS Longest Increasing Subsequence)给定一个数列,从中删掉任意若干项剩余的序列叫做它的一个子序列,求它的最长的子序列,满足子序列中的元素是单调递增的. 例如给定序列 ...
- HDU 1160 FatMouse's Speed(DP)
点我看题目 题意 :给你好多只老鼠的体重和速度,第 i 行代表着第 i 个位置上的老鼠,让你找出体重越大速度越慢的老鼠,先输出个数,再输出位置. 思路 :看题的时候竟然脑子抽风了,看了好久愣是没明白题 ...
- HDU 1160 FatMouse's Speed 动态规划 记录路径的最长上升子序列变形
题目大意:输入数据直到文件结束,每行两个数据 体重M 和 速度V,将其排列得到一个序列,要求为:体重越大 速度越低(相等则不符合条件).求这种序列最长的长度,并输出路径.答案不唯一,输出任意一种就好了 ...
- HDU - 1503 最长公共子序列记录路径
题意:先给两个水果的名字然后得出一个最短的序列包含这两个词. 思路:我一开始的思路是先求出最长公共子序列,然后做一些处理将其他的部分输出来:两种水果的字符串和最长公共子序列的字符串这三个字符串做对比, ...
- HDU 1160 FatMouse's Speed (最长上升子序列)
题目链接 题意:n个老鼠有各自的重量和速度,要求输出最长的重量依次严格递增,速度依次严格递减的序列,n最多1000,重量速度1-10000. 题解:按照重量递增排序,找出最长的速度下降子序列,记录序列 ...
随机推荐
- JwtBearerAppBuilderExtensions.UseJwtBearerAuthentication(IApplicationBuilder
netcore从1.1升级到2.0时,出的错,因为使用的时Jwt token参考https://github.com/aspnet/Security/issues/1310#issuecomment- ...
- zh-cn 与 zh-hans 是什么关系、有什么区别
回答一: 作者:知乎用户 链接:https://www.zhihu.com/question/21980689/answer/19923726 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权 ...
- Charles抓取https包
Android: 1.若滑动解锁,请先设置屏幕锁: 2.然后浏览器输入Charlesproxy.com/getssl,安装证书,出现安装证书提示,随便打个名称 比如Android,选择WLAN(这里A ...
- 动态加载JS脚本到HTML
如果用原生态的js 有2中方法 1.直接document.write <script language="javascript"> document.wr ...
- L1-033 出生年(15)(STL-set代码)
L1-033 出生年(15 分) 以上是新浪微博中一奇葩贴:"我出生于1988年,直到25岁才遇到4个数字都不相同的年份."也就是说,直到2013年才达到"4个数字都不相 ...
- dpdk优化相关 转
注:本文是参照了一些其他文章,原文地址点击这里. 首先根据这篇文章进行了性能瓶颈的分析 策略与方法 首先根据木桶原理,首先要找到最弱的地方,怎么找往上看↑. 想能优化需要考虑如下: 优化BIOS设置 ...
- Android.ApplicationCrash
1. 如何调试分析Android中发生的tombstone http://www.360doc.com/content/12/1017/10/7580194_241974419.shtml tombs ...
- MFC动态按钮的创建及其消息响应(自定义消息)
动态按钮(多个)的创建: 1.在类中声明并定义按钮控件的ID #define IDC_D_BTN 10000 2.在类的OnInitDialog()函数中动态创建按钮(建立按钮对象时最好建立对象的指针 ...
- UI设计课程教程分享:Banner的设计和技巧
Banner是一个网站的中心主题,可以从banner看出网站的内容.所以一个好的banner对网站的影响很大. 提高banner的制作从几点深入了解:文字排版.选择适合的图片及背景.颜色的用法. 一. ...
- eclipse中tomcat调试正确关联源码
1.build path中jar包关联本地源码 2.tomcat中添加source关联工程lib下的jar包 以上两步即可. 可解决tomcat直接关联本地源码debug时无法计算表达式的情况. 错误 ...