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(最长上升子序列,不错的题)相关推荐
- HDU1160 FatMouse's Speed —— DP
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=1160 FatMouse's Speed Time Limit: 2000/1000 MS ...
- Leetcode 300 最长递增子序列 (每日一题 20210803)
给你一个整数数组 nums ,找到其中最长严格递增子序列的长度.子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序.例如,[3,6,2,7] 是数组 [0,3,1,6,2 ...
- C语言(CED)最长公共子序列----动态规划第一题
一.动态规划算法与分治法的异同 相同点: A.二者均是将待求解的问题分成若干子问题来求解. B.二者在编写代码的时候,都要用到递归. 不同点: A.分治法求解的问题,在将问题分成若干子问题之后,其子问 ...
- HDU - 1160 FatMouse's Speed(最长不下降子序列)
题目链接:点击查看 题目大意:给出许多二元组(W,S),最后要求输出最长的满足W严格递增,S严格递减的子序列长度,以及方案,输出任意一种即可 题目分析:看起来像二维偏序,其实对任意一维排序后求最长不下 ...
- 力扣300、最长上升子序列动态规划刷题
解法1,复杂度O(n) class Solution:def lengthOfLIS(self, nums: List[int]) -> int:# 解法1,复杂度O(n)# 定义dp[]是以第 ...
- 序列输出ZOJ1108 FatMouse's Speed
PS:今天上午,非常郁闷,有很多简单基础的问题搞得我有些迷茫,哎,代码几天不写就忘.目前又不当COO,还是得用心记代码哦! ZOJ1108 FatMouse's Speed 最长下落子序列,这题挺好的 ...
- 最长上升子序列(LIS) nlogn解法
文章目录 经典DP解法O(n^2) dp+二分法(O(nlogn)) 最长上升子序列LIS:Longest increasing subsequence 题目链接:Leetcode300. 最长递增子 ...
- 1265:【例9.9】最长公共子序列 LCS 朴素做法O(n*2)
分析 最长公共子序列的模板题,参考视频:最长公共子序列 - 动态规划: 如果第一个序列的第i个字符,与第二个序列的第j个字符相等时,则i,j这个点的dp值为左上角的dp值+1:否则为,该点上面那个点和 ...
- Human Gene Functions(最长公共子序列变形题)
[题目]:问题 B: Human Gene Functions [来源]:点击打开链接 [解法]:这个题是最长公共子序列的变形题. 1.确定状态:状态表示显然是用二维数组表示DP[i][j]当前i和 ...
最新文章
- Freetype学习笔记(轉)
- 【福利解锁Part1】报名参与腾讯云专场活动,第一波干货内容免费放送
- 你好a+b(非入门)
- 网易严选Java开发三面面经:java技术编程培训班
- Java中注解学习系列教程-1
- Java 算法 麦森数
- 今天高考,讲几句大实话
- 用VBA编写的简易计算器
- Cookie和Session的知识
- 网络无人自动安装centos 6.2 + PXE + httpd + kickstart
- SSAS知识回放之订单数据分析
- java argument parse_snmp4j 之 ArgumentParser
- 网站服务器部署及优化---2---部署wordpress网站(rhel6.5)
- 按头安利 好看又实用的布纹 布料贴图素材看这里
- 【数据分析面试】大厂高频SQL笔试题(二)
- Mangos与mmorpg(转自百科)
- 红帽linux命令符,红帽子Linux_命令全解.doc
- Biopython -- Parsing BLAST output
- python爬虫爬取巨潮资讯网的pdf文件
- matplotlib高级教程之形状与路径——patches和path