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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

UVa 590 Always on the run(简单链式DP)

發布時間:2024/6/14 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 UVa 590 Always on the run(简单链式DP) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題意:

有n座城市,Trisha要求在這n座城市旅游k天,從城市1出發,第k天到達城市n。

輸入有n*(n-1)行,每n-1行代表i到除了i之外的其他城市航班的天數以及價格。

求出Trisha的最小花費。

思路:

鏈式dp,dp[i][d]代表第d天到達i城市所需要的最小代價,于是dp[i][d] = min(dp[i][d], dp[j][d-1] + price[j][i][X])。

意思是:第d天到達i城市所花費的代價是,第d-1天到達j城市 + j到i的價格 最小的一個。

由于初識狀態只有一個,即從城市1出發。所以初始值只有一個dp[1][0] = 0。

#include <cstdio> #include <cstdlib> #include <cstring> #include <climits>#define min(a,b) (((a) < (b)) ? (a) : (b))int day[15][15]; int price[15][15][35]; int dp[15][1005];int main() {int n, k;int cases = 0;while (scanf("%d %d", &n, &k) && n && k){for (int i = 1; i <= n; ++i)for (int j = 1; j <= n; ++j)if (i != j) {scanf("%d", &day[i][j]);for (int d = 1; d <= day[i][j]; ++d)scanf("%d", &price[i][j][d]);}for (int i = 0; i <= n; ++i){for (int d = 0; d <= k; ++d)dp[i][d] = INT_MAX;}dp[1][0] = 0;for (int d = 1; d <= k; ++d)for (int i = 1; i <= n; ++i)for (int j = 1; j <= n; ++j)if (i != j){int q = (d - 1) % day[j][i] + 1;if (price[j][i][q] && dp[j][d-1] != INT_MAX)dp[i][d] = min(dp[i][d], dp[j][d-1] + price[j][i][q]);}printf("Scenario #%d\n", ++cases);if (dp[n][k] != INT_MAX)printf("The best flight costs %d.\n\n", dp[n][k]);elseprintf("No flight possible.\n\n");}return 0; }

?

?

轉載于:https://www.cnblogs.com/kedebug/archive/2012/11/19/2776892.html

總結

以上是生活随笔為你收集整理的UVa 590 Always on the run(简单链式DP)的全部內容,希望文章能夠幫你解決所遇到的問題。

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