动态规划-LIS

时间:2021-03-03 16:18:17

https://vjudge.net/contest/297216?tdsourcetag=s_pctim_aiomsg#problem/E

#include<bits/stdc++.h>
using namespace std; struct note
{
int x,y,id;
} m[];
int f[];
int c[];
set<int> s;
bool cmp(note a,note b)
{
return a.x<b.x;
}
int main()
{
int cnt=;
int x,y;
while(cin>>x>>y)
{
m[++cnt].x=x;
m[cnt].y=y;
m[cnt].id=cnt;
}
sort(m+,m++cnt,cmp);
for(int i=; i<=cnt; i++)
for(int j=; j<i; j++)
{
if(m[i].y<m[j].y&&m[i].x>m[j].x&&f[i]<f[j]+)
{
f[i]=f[j]+;
c[i]=j;
}
}
int flag=;
int maxx=f[];
for(int i=;i<=cnt;i++)
{
if(f[i]>maxx)
{
maxx=f[i];
flag=i;
}
}
while(flag!=)
{
s.insert(flag);
flag=c[flag];
}
printf("%d\n",s.size());
for(auto i:s)
printf("%d\n",m[i].id); // s.insert(m[flag].id);
// while(c[flag]!=0)
// {
// s.insert(m[c[flag]].id);
// flag=c[flag];
// }
// printf("%d\n",s.size());
// for(auto i:s)
// printf("%d\n",i); }