UVA 10269 Super Mario,最短路+動態規劃

這個題目我昨晚看到的,沒什么思路,因為馬里奧有boot加速器,只要中間沒有城堡,即可不耗時間和腳力,瞬間移動不超過L距離,遇見城堡就要停下來,當然不能該使用超過K次。。。我糾結了很久,最終覺得還是只能寫個BFS,剪了下枝,不出意料還是TLE。。。

后來還是找的別人博客看了一下。。。其實之前也做了好多DP,也應該能想到,既然加速器可以用k次,則,每個點都有k個狀態,通過DP,把各個狀態進行下取優,就可以了。。。

這不得不讓我對DP有了些新的理解,DP在狀態轉移的時候,就好像最短路里面的松弛操作,或者二者只是外表的不同,本質是遵循一個道理。

當然在DP之前還需要一些處理

首先用個g[][]二維數組把題目所給的路徑給存下來,再用Floyd把點到點的最短路先求出來,當然不是完全的Floyd,因為這個floyd求出來的最短路完全是為了之后用加速器,加速器不允許途中有城堡,因此在floyd的時候要加判斷條件,有城堡在中間就不走。

用一個d[i][k]表示i點在加速器使用了k次的最短路徑。

一開始還以為是總加速距離不能超過L,后來發現原來是每次。要細心

#include <iostream>
#include <cstdio>
#include <cstring>
#define N 110
#define INF 1<<29
using namespace std;
int A,B,M,L,K;
int g[N][N],d[N][15];
int q[N*20],st[N*20],inq[N][20];
void init()
{for (int i=0;i<=A+B;i++){for (int j=0;j<=A+B;j++){if (i==j){g[i][j]=0;}elseg[i][j]=INF;}}
}
void floyd()
{int i,j,k;for (k=1;k<=A+B;k++){for (i=1;i<=A+B;i++){for (j=1;j<=A+B;j++){if (k>A) continue;//Floyd 只求能用加速器飛越的最短路if (g[i][j]>g[i][k]+g[k][j])g[i][j]=g[i][k]+g[k][j];//cout<<g[i][j]<<" "<<i<<" "<<j<<endl;
            }}}
}
void solve()
{int maxn=(K+1)*(A+B);int front=0,rear=0;memset(inq,0,sizeof inq);for (int i=1;i<=A+B;i++){for (int j=0;j<=K;j++){d[i][j]=INF;//cout<<d[i][j]<<endl;
        }}d[A+B][0]=0; //初始狀態q[rear]=A+B; //這次嘗試了一下手動隊列,而不是STL隊列,效果相同,不過手工的隊列時間應該好一些。st[rear]=0;rear++;while (front!=rear){int u=q[front];int k=st[front];front++;if (front>maxn)front=0;inq[u][k]=0;// cout<<u<<" "<<k<<" "<<d[u][k]<<endl;for (int i=1;i<=A+B;i++){if (d[i][k]>d[u][k]+g[u][i]) //進行普通最短路,保存當前狀態{d[i][k]=d[u][k]+g[u][i];if (!inq[i][k]){q[rear]=i;st[rear]=k;rear++;if (rear>maxn)rear=0;inq[i][k]=1;}}if (g[u][i]<=L && k<K && d[u][k]<d[i][k+1]) //如果能夠進行加速,并且加速后能更新加速后的狀態,則加速,并且保存該狀態。{d[i][k+1]=d[u][k];if (!inq[i][k+1]){inq[i][k+1]=1;q[rear]=i;st[rear]=k+1;rear++;if (rear>maxn)rear=0;}}}}
}
int main()
{int t;scanf("%d",&t);while (t--){scanf("%d%d%d%d%d",&A,&B,&M,&L,&K);init();for (int i=1;i<=M;i++){int a,b,c;scanf("%d%d%d",&a,&b,&c);g[a][b]=g[b][a]=c;}floyd();solve();int ans=INF;for (int i=0;i<=K;i++)if (ans>d[1][i])ans=d[1][i];printf("%d\n",ans);}return 0;
}

其實整個動規過程就是最短路的松弛過程,尤其是它把每個點的狀態都求到了,并且把松弛成功(或者說狀態轉移成功)的點又存貯進了隊列,以它來繼續尋求更新其他點,這種思想應該可以再用到以后其他的DP問題中

轉載于:https://www.cnblogs.com/kkrisen/p/3527278.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/258975.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/258975.shtml
英文地址,請注明出處:http://en.pswp.cn/news/258975.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python做數據可視化的代碼_Python數據可視化正態分布簡單分析及實現代碼

Python說來簡單也簡單&#xff0c;但是也不簡單&#xff0c;尤其是再跟高數結合起來的時候。。。 正態分布&#xff08;Normaldistribution&#xff09;&#xff0c;也稱“常態分布”&#xff0c;又名高斯分布&#xff08;Gaussiandistribution&#xff09;&#xff0c;最早由A…

ACdream 1061(abs用法)

題目鏈接&#xff1a;http://acdream.info/problem?pid1061 主要是abs用法&#xff0c;看題目的數據 long long的最大值&#xff1a;9223372036854775807 long long的最小值&#xff1a;-9223372036854775808 unsigned long long的最大值&#xff1a;18446744073709551615 由題…

wpf window 不執行show 就不能load執行_Numpy反序列化命令執行漏洞分析(CVE-2019-6446)附0day...

1、介紹 NumPy 是 Python 機器學習庫中之一&#xff0c;主要對于多為數組執行計算。NumPy 提供大量的 函數和操作&#xff0c;能夠幫助程序員便利進行數值計算。在 NumPy 1.16.0 版本之前存在反序列化 命令執行漏洞&#xff0c;用戶加載惡意的數據源造成命令執行。2、環境 軟件…

使用Def文件導出dll

前面我們介紹了dll的生成&#xff0c;大多數是使用extern "C"__declspec(dllexport)函數名的方法導出dll。其實我們還有另一種方法來導出dll。 先介紹參考文獻&#xff1a; 1.dll導出聲明相關 2.VS2012中 C創建DLL圖解 3.DLL中導出函數的兩種方式(dllexport與.…

HDU 1003 Maxsum

題目大意&#xff1a;求出數列的最大子段和&#xff0c;并且說明是從第幾項至第幾項。 題解1&#xff1a;簡單貪心。 #include <cstdio> #define rep(i,n) for(int i1;i<n;i) int main(){int t,l0;scanf("%d",&t);while(t--&&l){if(l!1)printf…

《JavaScript面向對象精要》——1.8 原始封裝類型

本節書摘來自異步社區《JavaScript面向對象精要》一書中的第1章&#xff0c;第1.8節&#xff0c;作者&#xff1a;【美】Nicholas C. Zakas著&#xff0c;更多章節內容可以訪問云棲社區“異步社區”公眾號查看 1.8 原始封裝類型 JavaScript中一個最讓人困惑的部分可能就是原始…

XML語法學習

本文章集合兩篇博文而寫&#xff0c;兩篇博文地址&#xff1a; XML學習總結(二)——XML入門&#xff1a; XML基礎<第一篇> XML簡介 XML是一種標記語言&#xff0c;用于描述數據&#xff0c;它提供一種標準化的方式來來表示文本數據。XML文檔以.xml為后綴。需要徹底注…

FM實現F4幫助系列三:彈出框多篩選…

FM實現F4幫助系列三&#xff1a;彈出框多篩選條件的搜索幫助&#xff08;根據搜索幫助篩選字段&#xff09;函數&#xff1a;F4IF_GET_SHLP_DESCRF4IF_START_VALUE_REQUEST效果圖&#xff1a;本例子代碼&#xff1a;找到需要的幫助:*&------------------------------------…

[數分提高]2014-2015-2第9教學周第1次課 (2015-04-28)

設 $$\bex a,b>0,\quad 0\leq f\in \calR[a,b],\quad \int_a^b xf(x)\rd x0. \eex$$ 試證: $$\bex \int_a^b x^2f(x)\rd x\leq ab \int_a^b f(x)\rd x; \eex$$ 并給出使得下列不等式成立的 (您認為的) 最優數: $$\bex \int_a^b x^3f(x)\rd x\leq (\quad) \int_a^b f(x)\rd x…

《計算復雜性:現代方法》——0.2 判定問題/語言

本節書摘來自華章計算機《計算復雜性&#xff1a;現代方法》一書中的第0章&#xff0c;第0.2節&#xff0c;作者 &#xff3b;美&#xff3d;桑杰夫阿羅拉&#xff08;Sanjeev Arora&#xff09;&#xff0c;博阿茲巴拉克&#xff08;Boaz Barak&#xff09;&#xff0c;譯 駱吉…

python從date目錄導入數據集_使用python劃分數據集

無論是訓練機器學習或是深度學習&#xff0c;第一步當然是先劃分數據集啦&#xff0c;今天小白整理了一些劃分數據集的方法&#xff0c;希望大佬們多多指教啊&#xff0c;嘻嘻~ 首先看一下數據集的樣子&#xff0c;flower_data文件夾下有四個文件夾&#xff0c;每個文件夾表示一…

開源牛人 zcbenz

事情是這樣的&#xff0c;微軟推出了Visual Studio Code&#xff0c;我很好奇他怎么做跨平臺的&#xff0c;所以就找找資料&#xff0c;在他的網站中是這么描述的&#xff1a; Architecturally, Visual Studio Code combines the best of web, native, and language-specific t…

eclipse 與 tomcat 的那些路徑

我們用mvn創建了一個web工程&#xff0c;同時希望在eclipse里調試開發。mvn有mvn的路徑要求&#xff0c;eclispe有eclipse的默認路徑&#xff0c;怎么整合二者&#xff1f; 首先介紹一下eclipse的默認路徑。 重點在Server Locations里面。 下面我們把[workspace]/.metadata\.pl…

boost解析xml文件

前面我們介紹了xml文件&#xff0c;今天我們試著用boost庫來解析xml文件。我們將舉兩個例子來說明怎么使用。 來自boost官方的例子 先看xml文件的內容&#xff1a; <debug><filename>debug.log</filename><modules><module>Finance</modul…

使用網橋模式(bridge networking mode)配置KVM-QUME虛擬機網絡

&#xff08;1&#xff09;linux要工作在網橋模式&#xff0c;所以必須安裝兩個RPM包。即&#xff1a;bridge-utils和tunctl。它們提供所需的brctl、tunctl命令行工具。能夠使用yum在線安裝&#xff1a; [rootserver3 ~]# yum install bridge-utils &#xff08;2&#xff09;查…

python數據處理常用函數_pandas數據分析常用函數總結大全:上篇

基礎知識在數據分析中就像是九陽神功&#xff0c;熟練的掌握&#xff0c;加以運用&#xff0c;就可以練就深厚的內力&#xff0c;成為絕頂高手自然不在話下&#xff01; 為了更好地學習數據分析&#xff0c;我對于數據分析中pandas這一模塊里面常用的函數進行了總結。整篇總結&…

XML的應用

1.XML的定義: XML 于 1998 年 2 月 10 日成為 W3C 的推薦標準。xml一般指可擴展標記語言&#xff0c;可擴展標記語言是一種很像超文本標記語言的標記語言。它的設計宗旨是傳輸數據&#xff0c;而不是顯示數據。 2.通過XML我們可以自定義自己的標簽&#xff0c;如&#xff1a; &…

虛擬機VMware里 windows server 2003 擴充C盤方法

你會經常用windows server 2003 嗎&#xff1f;應該不會吧&#xff0c;有時一些東西必須裝在windows server 2003 上才能用&#xff0c;所以 用虛擬機把&#xff0c;好&#xff0c;裝在虛擬機上&#xff0c;8G的C盤夠你用嗎&#xff0c;一個稍微大點的軟件就可能就沒空間來存儲…

從運維角度淺談MySQL數據庫優化

一個成熟的數據庫架構并不是一開始設計就具備高可用、高伸縮等特性的&#xff0c;它是隨著用戶量的增加&#xff0c;基礎架構才逐漸完善。這篇博文主要談MySQL數據庫發展周期中所面臨的問題及優化方案&#xff0c;暫且拋開前端應用不說&#xff0c;大致分為以下五個階段&#x…

c語言c99標準_自學C語言之一

上次自學C語言還是在剛開學到國慶期間&#xff0c;聽學姐的建議買了本C語言的書&#xff0c;在軍訓期間的晚上翻翻看看。后來選課、開始正式上課、面試社團、開各種會等等&#xff0c;好像每天都有許多事要忙&#xff0c;但又沒忙出來什么結果&#xff0c;慢慢地好像就把C語言放…