/*
找出重量从小到大、智商从大到小排列的最长子序列
*/
# include <stdio.h>
# include <algorithm>
using namespace std;
struct node
{
int w;
int q;
int id;
};
bool cmp(node a1,node a2)
{
return a1.w<a2.w;
}
int n;
struct node a[1010];
int dp[1010],path[1010];
int MAX=-1;
void slove(int x)
{
if(MAX--)
{
slove(path[x]);
printf("%d\n",a[x].id);
}
}
int main()
{
int i,j;
while(~scanf("%d",&n))
{
for(i=1;i<=n;i++)
{
scanf("%d%d",&a[i].w,&a[i].q);
a[i].id=i;
path[i]=i;
dp[i]=1;
}
sort(a,a+n+1,cmp);
int num=1;
for(i=1;i<=n;i++)
{
for(j=1;j<i;j++)
{
if(a[i].w>a[j].w&&a[i].q<a[j].q&&dp[i]<dp[j]+1)
{
dp[i]=dp[j]+1;
path[i]=j;//前一个
}
if(dp[i]>MAX)
{
MAX=dp[i];
num=i;
}
}
}
printf("%d\n",MAX);
slove(num);
}
return 0;
}
Is Bigger Smarter
最新推荐文章于 2020-02-24 22:46:08 发布