题目大意:输入数据直到文件结束,每行两个数据 体重M 和 速度V,将其排列得到一个序列,要求为:体重越大 速度越低(相等则不符合条件)。求这种序列最长的长度,并输出路径。答案不唯一,输出任意一种就好了。

题目思路:这是个最长上升子序列的问题,我们按W的升序进行排序,若W相等则按V的降序排序。用Pre[]记录当前点的前驱节点,Last记录序列最后一个点,maxn记录最长长度,完成动规后可根据Last和Pre[]输出路径。

#include<cstdio>
#include<stdio.h>
#include<cstdlib>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<vector>
#include<queue>
#define INF 0x3f3f3f3f
#define MAX 1000005 using namespace std; int dp[MAX],pre[MAX],ans[MAX];//pre[]数组记录当前点的前驱节点 struct node
{
int w,v,id;//为防止排序后老鼠的编号丢失,所以用id记录下来
}a[MAX]; bool cmp(node A,node B)
{
if(A.w!=B.w)
return A.w<B.w;//按体重升序排列
return A.v>B.v;//若体重相同则按速度降序排列
} int main()
{
int n,i,j,cnt=,maxn=,last=;
while(scanf("%d%d",&a[cnt].w,&a[cnt].v)!=EOF)
{
a[cnt].id=cnt;
cnt++;
}
sort(a+,a+cnt,cmp);
for(i=; i<MAX; i++)
pre[i]=i;//初始化每个点的前驱节点为自己
for(i=; i<MAX; i++)
dp[i]=;//最短的序列只包含自己,长度为一
for(i=; i<cnt; i++)
{
for(j=; j<=i; j++)
{
if(a[i].w>a[j].w && a[i].v<a[j].v)
{
if(dp[i] < dp[j]+)
{
dp[i]=dp[j]+;
pre[a[i].id]=a[j].id;//记录当前点的前驱节点
}
}
if(maxn < dp[i])
{
last=a[i].id;//更新最后一个节点
maxn=dp[i];
}
}
} printf("%d\n",maxn); for(i=maxn;i>=;i--)
{
ans[i]=last;
last=pre[last];
}//将pre[]倒着记录到ans[]里面 for(i=;i<=maxn;i++)
printf("%d\n",ans[i]);
return ;
}

HDU 1160 FatMouse's Speed 动态规划 记录路径的最长上升子序列变形的更多相关文章

  1. HDU - 1160 FatMouse's Speed 动态规划LIS,路径还原与nlogn优化

    HDU - 1160 给一些老鼠的体重和速度 要求对老鼠进行重排列,并找出一个最长的子序列,体重严格递增,速度严格递减 并输出一种方案 原题等于定义一个偏序关系 $(a,b)<(c.d)$ 当且 ...

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

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

  3. 题解报告:hdu 1160 FatMouse's Speed(LIS+记录路径)

    Problem Description FatMouse believes that the fatter a mouse is, the faster it runs. To disprove th ...

  4. hdu 1160 FatMouse's Speed(最长不下降子序列+输出路径)

    题意: FatMouse believes that the fatter a mouse is, the faster it runs. To disprove this, you want to ...

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

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

  6. HDU 1160 FatMouse's Speed (DP)

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

  7. HDU - 1160 FatMouse's Speed 【DP】

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1160 题意 给出一系列的 wi si 要找出一个最长的子序列 满足 wi 是按照升序排列的 si 是按 ...

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

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

  9. HDU 1160 FatMouse's Speed(DP)

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

随机推荐

  1. C# 反射相关的东西

     public class PlugingManager    {        //插件装载器        public ArrayList Plugins = new ArrayList();  ...

  2. OpenLDAP安装与配置

    系统:ubuntu 14.04 安装: 1. sudo apt-get install slapd ldap-utils 2. 在1的过程中会让你输了admin密码 配置: 如果安装过,只是想配置Op ...

  3. Apache Shiro 认证过程

    3.1.1    示例 Shiro验证Subjects 的过程中,可以分解成三个不同的步骤: 1. 收集Subjects 提交的Principals(身份)和Credentials(凭证): 2. 提 ...

  4. KMP算法类习题——字符串匹配

    Description For each prefix with length P of a given string S,if S[i]=S[i+P] for i in [0..SIZE(S)-p- ...

  5. 让AutoMapper在你的项目里飞一会儿(转)

    出处:http://www.cnblogs.com/WeiGe/p/3835523.html 先说说DTO DTO是个什么东东? DTO(Data Transfer Object)就是数据传输对象,说 ...

  6. Mac 下格式化U盘

    diskutil list 查看U盘盘符: lapommedeMacBook-Pro:~ lapomme$ diskutil list /dev/disk0 (internal, physical): ...

  7. SpringSecurity自定义过滤器

    applicationContext-security.xml: <beans:beans xmlns="http://www.springframework.org/schema/s ...

  8. 109.110.100.56 samba用户名 PAS, 密码 111111

    如果修改文件夹名字, 需要更改 cd /etc/samba/smb.conf 然后重启samba service smb restart 如果要修改文件夹权限 chmod -R 777 folder ...

  9. jetty访问jsp页面出现( PWC6345: There is an error in invoking javac)

    org.apache.jasper.JasperException: PWC6345: There is an error in invoking javac.  A full JDK (not ju ...

  10. cpu、内存、缓存、硬盘使用率

    1.cpu ./bunsan2.sh uptime < servers.txt | awk '{print $11 }' |sed 's/,//g' #!/bin/bash cpu_load=$ ...