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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

POJ - 3846 Mountain Road 动归

發(fā)布時間:2025/3/20 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 POJ - 3846 Mountain Road 动归 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

?POJ - 3846 Mountain Road

?

題意:n個人要過橋,有的人從左邊來,有的人從右邊來,給你他們到達(dá)橋一端的時間和過橋所需要的時間,要求相向而行的只能有一人,對于每一個點,不能在10s內(nèi)有同向而行的人經(jīng)過。

思路:f[i][j][A/B] 表示 從左邊走了i個,從右邊走了j個,最后一個是左邊還是右邊的最小時間。問你最后一輛車的到達(dá)時間最小是多少。

  對于每一個這樣的狀態(tài),可以往后面一直推過了k輛反向的車所消耗的時間,只要把出發(fā)時間和到達(dá)時間的間距都壓在10s以上就可以滿足條件,不斷的更新最優(yōu)值就行了。

  我之前寫的時候?qū)τ诿恳粋€狀態(tài)只知道推相鄰的狀態(tài),這樣導(dǎo)致轉(zhuǎn)移的代碼特別冗雜,最終答案也沒有對,而且還超時了,所以這題來講還是很遺憾沒寫出來,想到了狀態(tài),只是轉(zhuǎn)移的時候犯了錯誤,沒能過掉。

?

1 #include <iostream> 2 #include <cstdio> 3 #include <algorithm> 4 #include <cstring> 5 #define LL long long 6 #define INF 0x3f3f3f3f 7 #define IN freopen("in.txt","r",stdin) 8 #define OUT freopen("out.txt", "w", stdout) 9 #define MAXN 100005 10 using namespace std; 11 #define A 0 12 #define B 1 13 struct Node{ 14 int x, y, pos; 15 }; 16 int n; 17 int f[205][205][2]; 18 Node a[205], b[205]; 19 int a0, b0; 20 int main() 21 { 22 //IN; 23 //OUT; 24 int T; 25 scanf("%d", &T); 26 while(T--){ 27 scanf("%d\n", &n); 28 char ch; 29 int x, y; 30 a0 = 0; 31 b0 = 0; 32 //scanf("%c", &ch); 33 for(int i = 1; i <= n; i++){ 34 scanf("%c", &ch); 35 scanf("%d%d\n", &x, &y); 36 37 if(ch == 'A'){ 38 a0++; 39 a[a0].x = x; 40 a[a0].y = y; 41 a[a0].pos = i; 42 } 43 else{ 44 b0++; 45 b[b0].x = x; 46 b[b0].y = y; 47 b[b0].pos = i; 48 } 49 } 50 int i = 0, j = 0; 51 memset(f, INF, sizeof(f)); 52 f[0][0][A] = 0; 53 f[0][0][B] = 0; 54 int s, t; 55 for(int i = 0; i <= a0; i++){ 56 for(int j = 0; j <= b0; j++){ 57 t = f[i][j][A] - 10; 58 s = f[i][j][A] - 10; 59 for(int k = j + 1; k <= b0; k++){ 60 s = max(s + 10, b[k].x); 61 t = max(t + 10, s + b[k].y); 62 f[i][k][B] = min(f[i][k][B], t); 63 } 64 t = f[i][j][B] - 10; 65 s = f[i][j][B] - 10; 66 for(int k = i + 1; k <= a0; k++){ 67 s = max(s + 10, a[k].x); 68 t = max(t + 10, s + a[k].y); 69 f[k][j][A] = min(f[k][j][A], t); 70 } 71 } 72 } 73 printf("%d\n", min(f[a0][b0][A], f[a0][b0][B])); 74 } 75 return 0; 76 }

?

轉(zhuǎn)載于:https://www.cnblogs.com/macinchang/p/4747946.html

總結(jié)

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

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