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

题意:

FatMouse believes that the fatter a mouse is, the faster it runs. To disprove this, you want to take the data on a collection of mice and put as large a subset of this data as possible into a sequence so that the weights are increasing, but the speeds are decreasing.

要求输出哪些FatMouse被选中了,按顺序输出。

思路:

最长不下降子序列,且要记录路径。

看代码

代码:

struct node{
    int weight, speed, index;
}
mice[10005];

int dp[10005];
int path[10005];
int finalPath[10005];

bool cmp(node a,node b){
    if(a.weight==b.weight)
        return a.speed>b.speed;
    return a.weight<b.weight;
}

int main(){
    int cn=0;
    int t1,t2;
    while(scanf("%d%d",&t1,&t2)!=EOF){
        ++cn;
        mice[cn].weight=t1;
        mice[cn].speed=t2;
        mice[cn].index=cn;
    }
    sort(mice+1,mice+1+cn,cmp);
    rep(i,1,cn){
        dp[i]=1;
        path[i]=i;
    }
    rep(i,2,cn){
        int temp=0;
        int tempPos=i;
        rep(j,1,i-1) if(mice[j].weight<mice[i].weight && mice[j].speed>mice[i].speed){
            if(dp[j]>temp){
                temp=dp[j];
                tempPos=j;
            }
        }
        dp[i]=temp+1;
        path[i]=tempPos;
    }
    int ans=-1;
    int ansPos=-1;
    rep(i,1,cn){
        if(dp[i]>ans){
            ans=dp[i];
            ansPos=i;
        }
    }
    printf("%d\n",ans);

    int cn2=0;
    while(path[ansPos]!=ansPos){
        finalPath[++cn2]=mice[ansPos].index;
        ansPos = path[ansPos];
    }
    printf("%d\n",mice[ansPos].index);
    rep2(i,cn2,1) printf("%d\n",finalPath[i]);

    return 0;
}

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

时间: 2024-11-19 09:26:11

hdu 1160 FatMouse's Speed(最长不下降子序列+输出路径)的相关文章

HDU 1160 FatMouse&#39;s Speed (最长上升子序列+记录路径)

题目链接:HDU 1160 FatMouse's Speed 题意:求体重越重,反而速度越慢的例子,并输出对应的编号. 对speed进行从大到小排序,再求weight的最长上升序列,并输出路径. AC代码: #include<stdio.h> #include<algorithm> #include<stack> using namespace std; struct Node { int weight; int speed; int id; }; struct Nod

HDU 1160 FatMouse&#39;s Speed (最长上升子序列)

题目链接 题意:n个老鼠有各自的重量和速度,要求输出最长的重量依次严格递增,速度依次严格递减的序列,n最多1000,重量速度1-10000. 题解:按照重量递增排序,找出最长的速度下降子序列,记录序列每个位置的左边的位置,找到最大值终点再递归输出即可.(好久没做题了,花了很多时间才AC.) #include <bits/stdc++.h> using namespace std; struct sa { int weight,speed,pos,l; } data[1005]; bool cm

HDU 1160 FatMouse&#39;s Speed (动规+最长递减子序列)

FatMouse's Speed Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 9174    Accepted Submission(s): 4061 Special Judge Problem Description FatMouse believes that the fatter a mouse is, the faster

HDU 1160 FatMouse&#39;s Speed 动态规划 记录路径的最长上升子序列变形

题目大意:输入数据直到文件结束,每行两个数据 体重M 和 速度V,将其排列得到一个序列,要求为:体重越大 速度越低(相等则不符合条件).求这种序列最长的长度,并输出路径.答案不唯一,输出任意一种就好了. 题目思路:这是个最长上升子序列的问题,我们按W的升序进行排序,若W相等则按V的降序排序.用Pre[]记录当前点的前驱节点,Last记录序列最后一个点,maxn记录最长长度,完成动规后可根据Last和Pre[]输出路径. #include<cstdio> #include<stdio.h&

HDU 1160 FatMouse&#39;s Speed (最长有序的上升子序列)

题意:给你一系列个w,s,要你找到最长的n使得 W[m[1]] < W[m[2]] < ... < W[m[n]] and S[m[1]] > S[m[2]] > ... > S[m[n]] 即在这n个w,s中满足w[i]<w[j]&&s[i]>s[j],要求:体重严格递增,速度严格递减,原始顺序不定 首先将s从大到小排序,即顺数固定后转化为最长上升子序列问题. 案例: 6008 1300 6000 2100 500 2000 1000 40

HDU 1160 FatMouse&#39;s Speed (动态规划、最长下降子序列)

FatMouse's Speed Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 24573    Accepted Submission(s): 10896Special Judge Problem Description FatMouse believes that the fatter a mouse is, the faster

HDU 1160 FatMouse&#39;s Speed DP题解

本题就先排序老鼠的重量,然后查找老鼠的速度的最长递增子序列,不过因为需要按原来的标号输出,故此需要使用struct把三个信息打包起来. 查找最长递增子序列使用动态规划法,基本的一维动态规划法了. 记录路径:只需要记录后继标号,就可以逐个输出了. #include <stdio.h> #include <algorithm> using namespace std; const int MAX_N = 1005; struct MouseSpeed { int id, w, s; b

HDU 1160 FatMouse&#39;s Speed (sort + dp)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1160 给你一些老鼠的体重和速度,问你最多需要几只可以证明体重越重速度越慢,并输出任意一组答案. 结构体按照体重从小到大排序,然后根据速度就是最长下降子序列. 1 //#pragma comment(linker, "/STACK:102400000, 102400000") 2 #include <algorithm> 3 #include <iostream> 4

[dp专题]hdu 1160 FatMouse&#39;s Speed

FatMouse's Speed Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 10172    Accepted Submission(s): 4521Special Judge Problem Description FatMouse believes that the fatter a mouse is, the faster i