先对fweight 排升序 之后就只要考虑speed了 注意weight 有可能相等 题目要求的是严格的升序
而就转换成求 最长不连续递减子序列了~
#include <iostream>
using namespace std;
struct mouse
{
int w;
int s;
int order;
} m[1005];
int f[1005],t[1005],ans[1005];
int cmp(const void *a,const void *b)
{
return (*(mouse *)a).w > (*(mouse *)b).w ? 1:-1;
}
int main()
{
int n,temp,max,front,last,i,j;
n=0;
while(scanf("%d%d",&m[n].w,&m[n].s)!=EOF)
{
m[n].order=n;
n++;
}
// scanf("%d",&n);
// for(i=0;i<n;i++)
// { scanf("%d%d",&m[i].w,&m[i].s);
// m[i].order=i;
// }
qsort(m,n,sizeof(m[0]),cmp);
max=0;
for(i=0;i<n;i++)
{
temp=0;front=-1;
for(j=i-1;j>=0;j--)
{
if(m[i].s<m[j].s && m[i].w!=m[j].w && f[j]>temp)
{
temp=f[j];
front=j;
}
}
f[i]=temp+1;
t[i]=front;
if(max<f[i])
{
max=f[i];
last=i;
}
}
for (i=max-1,j=last;i>=0;i--)
{
ans[i]=j;
j=t[j];
}
printf("%d/n",max);
for (i=0;i<max;i++)
printf("%d/n",m[ans[i]].order+1);
return 0;
}