程序还是要多写啊。。。debug了好久才ac,唉~
#include<iostream>
#include<vector>
#include<algorithm>
#include<stack>
using namespace std;
const int maxn=12;
struct pp
{
int w,s;
int num;
int back;
bool operator < (const pp &cmp) const
{
if(w != cmp.w)
{
return w < cmp.w;
}
else
{
return s < cmp.s;
}
}
bool operator == (const pp &cmp) const
{
if(w == cmp.w && s == cmp.s)
{
return true;
}
else
{
return false;
}
}
}px;
vector<pp>v,vp;
stack<int>s;
int x,y,temp,t2,tmax;
int dp[1<<maxn];
int tmaxn=1;
int ti=1;
int main()
{
v.clear();
vp.clear();
memset(dp,0,sizeof(dp));
while(scanf("%d%d",&x,&y)!=EOF)
{
px.w=x;
px.s=y;
px.num=ti++;
vp.push_back(px);
}
sort(vp.begin(),vp.end());
v.push_back(vp[0]);
for(int i=1;i<vp.size();i++)
{
if(vp[i] == v.back())
{
continue;
}
else
{
v.push_back(vp[i]);
}
}
dp[0]=1;
v[0].back=-1;
tmax=0;
for(int i=1;i<v.size();i++)
{
temp=-1;
t2=0;
for(int j=i-1;j>=0;j--)
{
if(v[i].s<v[j].s)
{
if(dp[j]>t2)
{
temp=j;
t2=dp[j];
}
}
}
if(temp==-1)
{
dp[i]=1;
v[i].back=-1;
}
else
{
dp[i]=t2+1;
v[i].back=temp;
if(dp[i]>dp[tmax])
{
tmax=i;
}
}
}
cout<<dp[tmax]<<endl;
s.push(tmax);
while(v[s.top()].back!=-1)
{
s.push(v[s.top()].back);
}
while(!s.empty())
{
cout<<v[s.top()].num<<endl;
s.pop();
}
return 0;
}