HDU 1160 FatMouse's Speed(動態規劃 LIS最長不下降子序列)
阿新 • • 發佈:2019-01-09
#include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <cstdlib> #include <map> #include <list> #include <vector> #include <stack> #include <queue> #include <algorithm> #include <iostream> using namespace std; int l[1001]; int flag[1001][1001]; struct Mice{ int w; int s; int id; }mices[1001]; bool cmp(Mice a,Mice b) { if(a.w!=b.w) return a.w<b.w; else return a.s>b.s; } int main() { int size,Max; int i=0; while(scanf("%d%d",&mices[i].w,&mices[i].s)!=EOF) { mices[i].id=i+1; i++; } size=i; sort(mices,mices+size,cmp); for(int i=0;i<size;i++) { l[i]=1; flag[i][0]=i; } for(int i=1;i<size;i++) { for(int j=i-1;j>=0;j--) { if(mices[i].w>mices[j].w&&mices[i].s<mices[j].s&&l[i]<l[j]+1) { Max=l[j]+1; l[i]=Max; for(int k=0;k<Max-1;k++) flag[i][k]=flag[j][k]; flag[i][Max-1]=i; } } } int index; int k; for(index=0,k=1;k<size;k++) { if(l[index]<l[k]) index=k; } cout<<l[index]<<endl; for(int i=0;i<l[index];i++) { cout<<mices[flag[index][i]].id<<endl; } return 0; }