HDU - 1160 FatMouse's Speed(dp+路径记录)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HDU - 1160 FatMouse's Speed(dp+路径记录)相关的知识,希望对你有一定的参考价值。

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1160

题意:给定x组老鼠的重量(W)和速度(S)。求使得   W[m[1]] < W[m[2]] < ... < W[m[n]]       S[m[1]] > S[m[2]] > ... > S[m[n]] 的最长序列长度和路径

题解:排序一下,然后LIS,路径记录一下,输出就可以了

 1 #include <iostream>
 2 #include <algorithm>
 3 using namespace std;
 4 
 5 const int N=1111;
 6 struct TnT{
 7     int id;
 8     int w,s;
 9 }T[N];
10 
11 bool cmp(TnT a,TnT b){
12     if(a.w<b.w) return 1;
13     else if(a.w==b.w) return a.s>b.s;
14     else return 0;    
15 }
16 
17 int dp[N],pre[N];
18 
19 void print(int x){
20     if(pre[x]!=0) print(pre[x]);
21     cout<<T[x].id<<endl;
22 }
23 
24 int main(){
25     int n=1,ans=0,en;
26     while(cin>>T[n].w>>T[n].s&&T[n].w){
27         T[n].id=n;
28         n++;
29     }    
30     sort(T+1,T+n,cmp);
31     
32     for(int i=1;i<=n;i++){
33         dp[i]=1;
34         for(int j=1;j<i;j++){
35             if(T[i].w>T[j].w&&T[i].s<T[j].s&&dp[j]+1>dp[i]){
36                 dp[i]=dp[j]+1;
37                 pre[i]=j;
38             }
39         }
40         if(ans<dp[i]) {ans=dp[i];en=i;}
41     }
42     cout<<ans<<endl;
43     print(en);
44     return 0;
45 }

 

 

以上是关于HDU - 1160 FatMouse's Speed(dp+路径记录)的主要内容,如果未能解决你的问题,请参考以下文章

HDU-1160 FatMouse's Speed

HDU 1160 FatMouse's Speed (动态规划最长下降子序列)

HDU - 1160 FatMouse's Speed(dp+路径记录)

FatMouse's Speed HDU - 1160 最长上升序列,

[HDU1160]FatMouse's Speed

HDU 1160 FatMouse's Speed