日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

FatMouse's Speed hdu 1160(动态规划,最长上升子序列+记录路径)

發布時間:2023/12/10 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 FatMouse's Speed hdu 1160(动态规划,最长上升子序列+记录路径) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

http://acm.hdu.edu.cn/showproblem.php?pid=1160

?

?

題意:現給出老鼠的體重與速度,要求你找出符合要求的最長子序列。

? ? ? 要求是?W[m[1]] < W[m[2]] < ... < W[m[n]](體重) &&?S[m[1]] > S[m[2]] > ... > S[m[n]] (速度)

?

分析:有兩個變量的話比較不好控制,自然需要先排序。再仔細思考的話,覺得和之前做的防御導彈有點類似,都是求最多能有幾個符合條件的。思考到這,能 ? ? ? 求出來了,然后再記錄路徑就可以了

?

?

#include <iostream> #include <stdio.h> #include <string.h> #include <string> #include <vector> #include <algorithm> #include <map> #include <queue> #include <stack> #include <math.h>using namespace std;#define INF 0x3f3f3f3f const int maxn = 4007;typedef long long LL; int a[maxn], dp[maxn];struct node {int w, v, sign, h; }s[maxn];///按照體重從大到小的順序排序,若體重相同,按照速度從小到大排序 bool cmp(node p, node q) {if(p.w == q.w)return p.v<q.v;return p.w>q.w; }int main() {int k=1;while(scanf("%d %d", &s[k].w, &s[k].v)!=EOF){s[k].h = k;s[k].sign = -1;k++;}sort(s+1, s+k+1, cmp);int ans = 0;for(int i=1; i<k; i++){dp[i] = 1;///不管怎樣,它本身都符合條件,也就是它自己1個for(int j=1; j<i; j++){if(s[i].w<s[j].w && s[i].v>s[j].v){if(dp[j]+1>=dp[i]){dp[i] = dp[j]+1;s[i].sign = j;///標記路徑 }}if(dp[i]>dp[ans])ans = i;}}printf("%d\n", dp[ans]);while(s[ans].sign!=-1){printf("%d\n", s[ans].h);ans = s[ans].sign;}printf("%d\n", s[ans].h);return 0; } View Code

?

轉載于:https://www.cnblogs.com/daydayupacm/p/5744298.html

總結

以上是生活随笔為你收集整理的FatMouse's Speed hdu 1160(动态规划,最长上升子序列+记录路径)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。