题目的意思就是要求体重增,智商递减的最长序列.
按体重排序.
然后找智商的最大递增序列就行了.
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);
}