hdu1160FatMouse's Speed(DP)
生活随笔
收集整理的這篇文章主要介紹了
hdu1160FatMouse's Speed(DP)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
http://acm.hdu.edu.cn/showproblem.php?pid=1160
1A 破題敲了一個多小時 最長上升子序列和最長下降子序列合起來 并把路徑保留下來 題中是可以打亂順序去找的 先按W上升或S下降排下序 再按最升和最降做
View Code1 #include <iostream> 2 #include<cstdio> 3 #include<string.h> 4 #include<algorithm> 5 using namespace std; 6 struct node 7 { 8 int w,s,xu; 9 }q[1011]; 10 bool cmp(node a,node b) 11 { 12 return a.w<b.w; 13 } 14 int dp[1011],da[1011][1011]; 15 int main() 16 { 17 int i = 0,j,k,n,m,g,x; 18 while(scanf("%d%d",&q[i].w,&q[i].s)!=EOF) 19 { 20 if(q[i].w==0) 21 break; 22 q[i].xu = i+1; 23 i++; 24 } 25 sort(q,q+i,cmp); 26 for(j = 0; j <i ; j++) 27 da[j][1] = q[j].xu; 28 dp[0] = 1; 29 x = 0; 30 int max = 1; 31 for(j = 1 ; j < i ; j++) 32 { 33 int tmax = 1; 34 for(k = 0 ; k < j ; k++) 35 if(q[k].w<q[j].w&&q[k].s>q[j].s&&dp[k]+1>tmax) 36 { 37 tmax = dp[k]+1; 38 for(g = 1 ; g <= dp[k] ; g++) 39 da[j][g] = da[k][g]; 40 da[j][tmax] = q[j].xu; 41 } 42 dp[j] = tmax; 43 if(tmax>max) 44 { 45 max = tmax; 46 x = j; 47 } 48 } 49 printf("%d\n",max); 50 for(i = 1 ; i <= max ; i++) 51 printf("%d\n",da[x][i]); 52 return 0; 53 }
?
轉載于:https://www.cnblogs.com/shangyu/archive/2012/09/05/2672431.html
總結
以上是生活随笔為你收集整理的hdu1160FatMouse's Speed(DP)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 试管婴儿促排来月经
- 下一篇: 不同浏览器的怪癖小结【转】