FatMouse的速度

FatMouse的速度

时间限制:2000/1000ms (Java /其他)内存限制:65536/32768K (Java /其它)
总提交(s): 23日接受提交(s): 11
特殊的法官
问题描述
FatMouse认为胖的一只老鼠,它运行得越快。 为了证明这一点,你想把老鼠的数据收集尽可能大的这些数据的一个子集序列,这样重量增加,但速度下降。

输入
输入数据包含一群老鼠,每行一个鼠标,终止结束的文件。 数据为一个特定的鼠标将包括两个整数:第一个代表克它的大小,第二个代表厘米每秒的速度。 都在1到10000之间的整数。 每个测试用例中的数据将包含信息最多1000只老鼠。 两只老鼠可能有相同的重量,同样的速度,甚至同样的重量和速度。

输出
你的程序应该输出一个序列行数据; 第一行应该包含一个n; 剩下的n线都应该包含一个正整数(每一个代表鼠标)。 如果这些n个整数m [1], [2],… ,m [n]那必须的 W [m [1]] < W [m [2]] <… < W [m [n]] 和 S [m [1]] > [m [2]] >… > S [m [n]] 为了让答案是正确的,应该尽可能大。 所有的不平等都是严格的:必须严格增加重量,速度必须严格递减。 可能有很多正确的输出对于一个给定的输入,程序只需要找到一个。

样例输入
6008 1300
6000 2100
500 2000
1000 4000
1100 3000
6000 2000
8000 1400
6000 1200
2000 1900

样例输出
4
4
5
9
7

在这里插入代码片#include<bits/stdc++.h>
using namespace std;
struct arr{
	int w,s;
	int hao;
}shu[1050];
int dp[1050],lode[1050],ans[1005];
bool aee(arr a,arr b){
	if(a.w==b.w){
		return a.s<b.s;
	}
	return a.w<b.w;
}
int main(){
	int i=1;
	while(cin>>shu[i].w>>shu[i].s){
		shu[i].hao=i;
		dp[i]=1;
		lode[i]=0;
		i++;
	}
	sort(shu+1,shu+i,aee);
	int n=i-1;
	int maxl=0,maxi;
	//判断第i只老鼠前是否有
		for(int i = 2 ; i <= n ; i++){
		for(int j = 1; j <i ;j++ ){
			if(shu[i].w>shu[j].w&&shu[i].s<shu[j].s&&dp[i]<dp[j]+1)
			//如果i老鼠比j老鼠重且跑的慢 and j老鼠前满足序列长度+1(把i老鼠算进去)比长
			{
				dp[i]=dp[j]+1;
				lode[i]=j;//表示这个序列中在i老鼠后面的是j老鼠,用于最后输出
			}
		}
		if(dp[i]>maxl){
		//maxl:当前满足条件的最长子序列的长度;
			maxl=dp[i];
			maxi=i;//最长子序列中最后的老鼠对应的位置;
		}
	}
	int temp=maxi;
	int x=0;
	while(temp!=0){
		ans[x]=temp;
		temp=lode[temp];
		x++;
	}
	cout<<maxl<<endl;
	for(int q = maxl-1 ;q >= 0; q--){
		cout<<shu[ans[q]].hao<<endl;
	}
	return 0;
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值