uva10131

题目的意思就是要求体重增,智商递减的最长序列.

按体重排序.

然后找智商的最大递增序列就行了.


ac代码:


#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<stack>
using namespace std;
const int N = 1000 + 5;
struct ele {
	int w;
	int q;
	int cas;
}e[N];
int d[N];
int f[N];
int cmp (ele a ,ele b) {
	return a.w < b.w;
}
int w,q,num;
void print(int res) {
	if(f[res] == -1) {
		printf("%d\n",e[res].cas);
		return;
	}
	print(f[res]);
	printf("%d\n",e[res].cas);
}
int main () {
	num = 0 ;
	while (scanf("%d%d",&e[num].w,&e[num].q) != EOF) {
		d[num] = 1;
		e[num].cas = num + 1;
		num++;
	}
	sort(e , e + num ,cmp);
	memset(f , -1 ,sizeof(f));
	int m = 0;
	int res = 0;
	for (int i = 0 ; i < num ;i++) {
		for (int j = 0 ; j < i ;j++) {
			if(e[j].w < e[i].w && e[j].q > e[i].q && d[j] + 1 > d[i]) {
				d[i] = d[j] + 1;
				f[i] = j;
			}
			if (d[i] > m) {
				m = d[i];
				res = i;
			}
		}
	}
	printf("%d\n",m);
	print(res);
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值