#include <iostream> #include <algorithm> #include <stack> #define MAX 1000 using namespace std; struct mice { int index; int weight; int speed; }; mice mices[MAX+1]; int f[MAX+1]; int flag[MAX+1]; bool cmp(const mice mice1,const mice mice2) { if(mice1.weight!=mice2.weight) { return mice1.weight < mice2.weight; } else { return mice1.speed>mice2.speed; } } int main() { int w,s; stack <int> stk; int cnt=1; f[1]=1; flag[1]=1; //input while(cin>>w>>s) { mices[cnt].index = cnt; mices[cnt].weight =w; mices[cnt].speed =s; cnt++; } //sort sort(mices+1,mices+cnt,cmp); //dp for(int i=2;i<cnt;i++) { int maxTemp; int temp=0; for(int j=1;j<i;j++) { if(mices[i].weight>mices[j].weight&& mices[i].speed<mices[j].speed) { if(temp<f[j]) { temp = f[j]; flag[i]=j; } } } f[i]=temp+1; } int max=-1; int maxi; for(int i=1;i<cnt;i++) { if(f[i]>max) { max = f[i]; maxi = i; } } cout<<max<<endl; for(int i=0;i<max;i++) { int j=maxi; stk.push(mices[j].index); maxi = flag[j]; } while(!stk.empty()) { cout<<stk.top()<<endl; stk.pop(); } return 0; }
别的大神AC的代码,学习下其中sort 和堆栈的使用