HDU1160:FatMouse's Speed(最长上升子序列,不错的题)

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

学的东西还是不深入啊,明明会最长上升子序列,可是还是没有A出这题,反而做的一点思路没有,题意就不多说了,真是怀疑了为什么做这题的时候竟然想用nlog(n)的那个算法,

根本不可能有解啊,真想抽自己一下,最后无奈看了题解,发现他们写的非常棒,记录路径仅用一个数组就可以实现,可惜我没有想到啊,还是做题不深入啊。

首先需要排一下序。

代码如下:

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <queue>
#include <math.h>
#define inf 0x3f3f3f3f
typedef long long ll;
using namespace std;
int n,da[1010][1010],dp[1010];
struct node
{
    int id,w,s;
} q[1010];
int cmp(const void *a,const void *b)
{
    struct node *aa=(struct node *)a;
    struct node *bb=(struct node *)b;
    if(aa->w!=bb->w)
        return aa->w-bb->w;
    else  return bb->s-aa->s;
}
int main()
{
    int tt,maxx=1;;
    tt=0;
    while(scanf("%d%d",&q[tt].w,&q[tt].s)!=EOF)
    {
        if(q[tt].w==0) break;
        q[tt].id=tt+1;
        tt++;
    }
    qsort(q,tt,sizeof(q[0]),cmp);
    for(int i=0;i<tt;i++)
    {
        da[i][1]=q[i].id;//da[i][j]数组用来保存以i开头的最长序列,为j。
        dp[i]=1;//最短也包括它本身,为1,dp的初始化特别重要
    }
    int x=0;
    for(int i=1;i<tt;i++)
    {
        for(int j=0;j<i;j++)
        {
            if(q[i].w>q[j].w&&q[i].s<q[j].s&&dp[j]+1>dp[i])
            {
                dp[i]=max(dp[i],dp[j]+1);
                for(int k=1;k<dp[i];k++)
                {
                    da[i][k]=da[j][k];
                }
                da[i][dp[i]]=q[i].id;//不断更改路径,大神们写的真好
            }
        }
        if(dp[i]>maxx)
        {
            maxx=dp[i];
            x=i;
        }
    }
    printf("%d\n",maxx);
    for(int i=1;i<=maxx;i++)
    {
        printf("%d\n",da[x][i]);
    }
    return 0;
}

HDU1160:FatMouse's Speed(最长上升子序列,不错的题)

时间: 2025-01-06 17:13:07

HDU1160: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 【最长上升子序列】

题目链接: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): 9965    Accepted Submission(s): 4427 Special Judge Problem Description FatMo

hdu1160,FatMouse&#39;s Speed

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

poj 3903 Stock Exchange(最长上升子序列,模版题)

题目 #include<stdio.h> //最长上升子序列 nlogn //入口参数:数组名+数组长度,类型不限,结构体类型可以通过重载运算符实现 //数组下标从1号开始. int bsearch(int a[],int len,int num) { int left=1,right=len; while(left<=right) { int mid=(left+right)/2; if(num<=a[mid]) //若最长不下降子序列,改<= 为 < right=m

POJ 3903 Stock Exchange 【最长上升子序列】模板题

题目链接:http://poj.org/problem?id=3903 转载于:https://www.cnblogs.com/GodA/p/5180560.html 题目大意: 裸的DP最长上升子序列,给你一段序列,求其最长上升子序列的长度,n^2的dp朴素算法过不了,这里用的是nlogn的算法,用了二分查找. 具体算法思路解析: 学习动态规划问题(DP问题)中,其中有一个知识点叫最长上升子序列(longest  increasing subsequence),也可以叫最长非降序子序列,简称L

POJ-1458-Common Subsequence-动规最长公共子序列

题目链接:http://poj.org/problem?id=1458 这是一道最长公共子序列的模板题: #include<iostream> #include<string> #include<cstdio> #include<cstring> #include<queue> #include<map> #include<stack> #include<set> #include<vector>

(最长上升子序列 并记录过程)FatMouse&#39;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): 5405Special Judge Problem Description FatMouse be

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