UVA116 簡單的多階段DP

2021-07-25 13:59:41 字數 744 閱讀 4999

題意

m行n列的矩陣,求從一邊到另一邊的最短路。矩陣的最頂端和最底端是相連的。

題解從最後一列開始逆推,求最短路並記錄下來。在記錄最短路的過程中,如果某一列存在兩個最優解的情況,選擇字典序小的那個最優解。最後把記錄下來的最短路輸出即可。

注意事項

注意m行1列的情況,被這種情況坑了好久。。。。

**

#include 

#include

#include

#define inf 1e9

using namespace std;

int dp[20][110];

int nex[20][110];

int a[20][110];

int main()

}int ans=inf,first=0;

for(int j=m;j>=1;j--);

if(i==n)

k[1]=1;

if(i==1)

k[2]=n;

sort(k,k+3);

for(int

s=0;s

<3;s++)}}

if(j==1&&dp[i][j]int

last=first;

printf("%d",first);

for(int i=1;i<=m-1;i++)

printf("\n%d\n",ans);

}return

0;}

uva 116 (記憶化搜尋)

題意 如圖,從左到右走,每次可以往左上 up 左 fo 左下 dn 走,當走到第一行或最後一行時可以如圖穿越。求一條權值最小的路徑,並列印字典序最小的路徑。解析 狀態轉移方程 dp i j min dp i 1 m m j 1 up dp i j 1 fo dp i 1 m j 1 dn 字典序最小...

uva 539 簡單回溯)

題目大意 輸入兩個數n,m 表示有0到n 1個節點,m條邊 問?從某乙個節點從出發最多能走多少條邊 每條邊只能走一次 題目分析 列舉所有節點,回溯計算從該節點出發最多能經過幾條邊 for i 0 to n 1 列舉所有節點 dfs i,0 回溯計算從該節點出發所能經過的最大邊數 那麼dfs函式中的內...

uva 725 簡單列舉

題目大意 按從小到大的順序輸出所有形如abcde fghij n的表示式,其中a j卡位數字0 9的乙個排列,含前導0.解題思路 除數,被除數都是5位數,把fghij從1234開始列舉一直到98765,那麼abcde就是它乘以n,每一組輸出間加乙個換行。include include include...