标签:
1 #include<iostream> 2 #include<cstring> 3 #include<algorithm> 4 #include<cstdio> 5 6 using namespace std; 7 8 const int maxn=1005; 9 10 int dp[maxn]; //以第i个为结束元素的序列的最大值 11 int pre[maxn]; //记录序列 12 13 struct Node 14 { 15 int w,s,num; //num记录输入的顺序 16 }node[maxn]; 17 18 bool cmp(Node a,Node b) 19 { 20 if(a.w==b.w) 21 return a.s>b.s; 22 return a.w<b.w; 23 } 24 25 //输出路径 26 void output(int cur) 27 { 28 if(pre[cur]!=-1) 29 output(pre[cur]); 30 cout<<node[cur].num<<endl; 31 } 32 33 int main() 34 { 35 //freopen("in.txt","r",stdin); //记住要注释掉 36 37 int u,v; 38 int tot=1; 39 40 while(cin>>u>>v) 41 { 42 node[tot].w=u; 43 node[tot].s=v; 44 node[tot].num=tot++; 45 } 46 47 sort(node+1,node+tot,cmp); 48 49 memset(pre,-1,sizeof(pre)); 50 51 for(int i=1;i<tot;i++) 52 dp[i]=1; 53 54 for(int i=1;i<tot;i++) 55 { 56 for(int j=1;j<i;j++) 57 if(node[j].w<node[i].w&&node[j].s>node[i].s) 58 if(dp[j]+1>dp[i]) 59 { 60 dp[i]=dp[j]+1; 61 pre[i]=j; 62 } 63 } 64 65 int ans=0; 66 int cur; 67 for(int i=1;i<tot;i++) 68 if(dp[i]>ans) 69 { 70 ans=dp[i]; 71 cur=i; 72 } 73 74 cout<<ans<<endl; 75 76 output(cur); 77 78 return 0; 79 }
HDU 1160 FatMouse's Speed 简单DP
标签:
原文地址:http://www.cnblogs.com/-maybe/p/4448317.html