题目: 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(最长上升子序列,不错的题)相关推荐

  1. HDU1160 FatMouse's Speed —— DP

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=1160 FatMouse's Speed Time Limit: 2000/1000 MS ...

  2. Leetcode 300 最长递增子序列 (每日一题 20210803)

    给你一个整数数组 nums ,找到其中最长严格递增子序列的长度.子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序.例如,[3,6,2,7] 是数组 [0,3,1,6,2 ...

  3. C语言(CED)最长公共子序列----动态规划第一题

    一.动态规划算法与分治法的异同 相同点: A.二者均是将待求解的问题分成若干子问题来求解. B.二者在编写代码的时候,都要用到递归. 不同点: A.分治法求解的问题,在将问题分成若干子问题之后,其子问 ...

  4. HDU - 1160 FatMouse's Speed(最长不下降子序列)

    题目链接:点击查看 题目大意:给出许多二元组(W,S),最后要求输出最长的满足W严格递增,S严格递减的子序列长度,以及方案,输出任意一种即可 题目分析:看起来像二维偏序,其实对任意一维排序后求最长不下 ...

  5. 力扣300、最长上升子序列动态规划刷题

    解法1,复杂度O(n) class Solution:def lengthOfLIS(self, nums: List[int]) -> int:# 解法1,复杂度O(n)# 定义dp[]是以第 ...

  6. 序列输出ZOJ1108 FatMouse's Speed

    PS:今天上午,非常郁闷,有很多简单基础的问题搞得我有些迷茫,哎,代码几天不写就忘.目前又不当COO,还是得用心记代码哦! ZOJ1108 FatMouse's Speed 最长下落子序列,这题挺好的 ...

  7. 最长上升子序列(LIS) nlogn解法

    文章目录 经典DP解法O(n^2) dp+二分法(O(nlogn)) 最长上升子序列LIS:Longest increasing subsequence 题目链接:Leetcode300. 最长递增子 ...

  8. 1265:【例9.9】最长公共子序列 LCS 朴素做法O(n*2)

    分析 最长公共子序列的模板题,参考视频:最长公共子序列 - 动态规划: 如果第一个序列的第i个字符,与第二个序列的第j个字符相等时,则i,j这个点的dp值为左上角的dp值+1:否则为,该点上面那个点和 ...

  9. Human Gene Functions(最长公共子序列变形题)

    [题目]:问题 B:  Human Gene Functions [来源]:点击打开链接 [解法]:这个题是最长公共子序列的变形题. 1.确定状态:状态表示显然是用二维数组表示DP[i][j]当前i和 ...

最新文章

  1. Freetype学习笔记(轉)
  2. 【福利解锁Part1】报名参与腾讯云专场活动,第一波干货内容免费放送
  3. 你好a+b(非入门)
  4. 网易严选Java开发三面面经:java技术编程培训班
  5. Java中注解学习系列教程-1
  6. Java 算法 麦森数
  7. 今天高考,讲几句大实话
  8. 用VBA编写的简易计算器
  9. Cookie和Session的知识
  10. 网络无人自动安装centos 6.2 + PXE + httpd + kickstart
  11. SSAS知识回放之订单数据分析
  12. java argument parse_snmp4j 之 ArgumentParser
  13. 网站服务器部署及优化---2---部署wordpress网站(rhel6.5)
  14. 按头安利 好看又实用的布纹 布料贴图素材看这里
  15. 【数据分析面试】大厂高频SQL笔试题(二)
  16. Mangos与mmorpg(转自百科)
  17. 红帽linux命令符,红帽子Linux_命令全解.doc
  18. Biopython -- Parsing BLAST output
  19. python爬虫爬取巨潮资讯网的pdf文件
  20. matplotlib高级教程之形状与路径——patches和path

热门文章

  1. 微信-支付宝-支付响应体
  2. 项目微管理13 - 新人
  3. C# .NET 使用第三方类库DotNetZip解压/压缩Zip文件
  4. oozie案例——自定义MapReduce workflow
  5. poj 3468 线段树
  6. dfs-Rank the Languages
  7. 可以弹的钢琴,很不错(转)
  8. MapPoint之旅(2)-----Getting Started with MapPoint Web Service(1)
  9. 5 个流行的用于远程工作和在线会议的开源视频会议工具
  10. 图像亮度、对比度调节(伽马校正)