题意:求最长序列,使重量递增,速度递减
思路:典型最长上升子序列
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
struct node
{
int w,s,id;
}m[1005];
int dp[1005];
int pre[1005];
bool cmp(node a,node b)
{
if(a.w==b.w) return a.s>=b.s;
return a.w<b.w;
}
void print(int x)
{
if(x==-1)
return;
print(pre[x]);
printf("%d\n",m[x].id);
}
int main()
{
int a,b,k=0;
while(scanf("%d%d",&m[k].w,&m[k].s)!=EOF)
{
m[k].id=k+1;
k++;
}
int last=0;
sort(m,m+k,cmp);
memset(pre,-1,sizeof(pre));
int ans=0;
for(int i=0;i<k;i++){
dp[i]=1;
for(int j=0;j<i;j++){
if(m[i].w>m[j].w&&m[i].s<m[j].s&&dp[j]+1>dp[i]){
dp[i]=dp[j]+1;
pre[i]=j;
}
}
if(dp[i]>ans){
ans=dp[i];
last=i;
}
}
printf("%d\n",ans);
print(last);
}