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(dp+路径记录)