hdu(1160)——FatMouse's Speed

题意:

现在给你一些数据输入,第一个代表的是体积,第二个代表的是它的速度。然后题目让你找到当体积递增但是速度递减时的最长的一个子序列,注意这里体积是要严格的递增的,速度则是要严格的递减的。最后要你把他们的序号输出。

思路:

是不是有点感觉像LIS问题。但是这里还是有点差别的。因为它要让你记录。

首先我们先对体积从小到大排序,然后我们对速度进行最长递减子序列的查询。

这里的记录前驱和我们上次的那个迷宫问题(poj 3984)一样,只需要另外开一个数组就好了。

链接:http://blog.csdn.net/acmer_hades/article/details/47069073

感觉掌握了一个题,就可以引申到另外一个题目中去的。毕竟方法都是差不多的。

#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#include<vector>
#include<set>
#include<map>
#include<queue>
#include<math.h>
using namespace std;
#define maxn 1111
int dp[maxn],fa[maxn];
struct node{
	int w,s;
	int idx;
}a[maxn];
bool cmp(node a,node b){
	return a.w<b.w;
}
void print(int t){
	if(fa[t]==-1){
		printf("%d\n",a[t].idx);
		return;
	}
	print(fa[t]);
	printf("%d\n",a[t].idx);
}
int main(){
	int n=1;
	while(~scanf("%d%d",&a[n].w,&a[n].s)){
		a[n].idx=n++;
	}
	sort(a+1,a+n,cmp);		//注意这里要从小到大排序,要不然会WA。
	fill(dp,dp+n,1);
	memset(fa,-1,sizeof(fa));
	int dp_max=0,nmax=0,f=0;
	//以下是重点,与平时所写的LIS有点区别;
	for(int i=1;i<=n-1;i++){
		f=-1;
		dp_max=0;
		for(int j=1;j<i;j++){
			if(a[i].s<a[j].s&&a[i].w>a[j].w){
				if(dp[j]>dp_max){
					dp_max=dp[j];
					f=j;
				}
			}
		}
		dp[i]=dp_max+1;
		fa[i]=f;
		if(dp[i]>dp[nmax]) nmax=i;
	}
	int len=dp[nmax];
	printf("%d\n",len);
	print(nmax);
}
/*
9
6008 1300
6000 2100
500 2000
1000 4000
1100 3000
6000 2000
8000 1400
6000 1200
2000 1900
*/

Get better day by day!

版权声明:本文为博主原创文章,未经博主允许不得转载。

hdu(1160)——FatMouse's Speed

时间: 2024-10-10 20:48:14

hdu(1160)——FatMouse's Speed的相关文章

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(dp)

http://acm.hdu.edu.cn/showproblem.php?pid=1160 #include <algorithm> #include <iostream> #include <cstring> #include <cstdio> #include <queue> using namespace std; struct Node { int w,s,id,fa; }; Node mice[1000+10]; int dp[100

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 (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

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

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

[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

hdu 1160 FatMouse&#39;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 s

LIS [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): 9448    Accepted Submission(s): 4205 Special Judge Problem Description FatMouse believes that the fatter a mouse is, the faster

HDU 1160 FatMouse&#39;s Speed

半个下午,总算A过去了 毕竟水题 好歹是自己独立思考,debug,然后2A过的 我为人人的dp算法 题意: 为了支持你的观点,你需要从给的数据中找出尽量多的数据,说明老鼠越重速度越慢这一论点 本着“指针是程序员杀手”这一原则,我果断用pre来表示这只老鼠的直接前驱的序号 代码中我是按体重从大到小排序,然后找出一条最长的体重严格递减速度严格递增的“链”(其实找到的是链尾). 然后输出的时候从后往前输出 对结构体排序 对于样例来说,循环完以后应该是这样的: order 2 3 4 8 1 5 7 0

HDU 1160 FatMouse&#39;s Speed 简单DP

FatMouse's Speed Problem Description 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