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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

uva1025

發(fā)布時間:2024/4/11 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 uva1025 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

題意:有n個車站,起點車站和終點車站都有k輛列車分別在不同時刻出發(fā),問從起點走的人在指定時刻到終點,最少要等多長時間。

分析:拿到題目,感覺很復(fù)雜,看了作者的分析,才明白怎么dp,看似不好dp,實際只要找到以時間為關(guān)鍵點,等待時間為dp對象就好做了,從t時刻終點開始,每次都有等1單位和乘向左或向右列車的方案。如果乘列車那么等待時間就不會變。

#include<iostream> #include<string.h> #include<sstream> #include<set> #include<algorithm> #include<vector> #include<map> #include<queue> #include<math.h> using namespace std; const int maxn=50+5; const int maxt = 200 + 5; const int INF = 10000000000;int t[maxn], has_train[maxt][maxn][2]; int dp[maxt][maxn]; int main() {int kase=0,n,T;while (cin >> n>>T&&n) {int M1, M2, d;for (int i = 1; i < n; i++)cin >> t[i];memset(has_train, 0, sizeof(has_train));cin >> M1;while (M1--) {int d;cin >> d;for (int j = 1; j < n; j++) {if (d <= T)has_train[d][j][0] = 1;d += t[j];}}cin >> M2;while (M2--) {int d;cin >> d;for (int j = n-1; j >0; j--) {if (d <= T)has_train[d][j+1][1] = 1;d += t[j];}}for (int j = 1; j < n; j++)dp[T][j] = INF;dp[T][n] = 0;for (int i = T - 1; i >= 0; i--) {for (int j = 1; j <= n; j++) {dp[i][j] = dp[i + 1][j] + 1;if (j < n&&has_train[i][j][0] && i + t[j] <= T) {//向右dp[i][j] = min(dp[i][j], dp[i + t[j]][j + 1]);}if (j > 1 && has_train[i][j][1] && i + t[j - 1] <= T) {//向左dp[i][j] = min(dp[i][j], dp[i + t[j - 1]][j - 1]);}}}cout << "Case Number " << ++kase << ": ";if (dp[0][1] >= INF)cout << "impossible\n";else cout << dp[0][1]<< endl;}return 0; }

?

總結(jié)

以上是生活随笔為你收集整理的uva1025的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。