hihocoder 1702 矩陣迷宮 DP

2021-08-17 21:12:33 字數 1416 閱讀 5238

時間限制:

10000ms

單點時限:

1000ms

記憶體限制:

256mb

給定乙個nxn的方格矩陣迷宮,每個格仔中都有乙個整數aij。最初小hi位於迷宮左上角的格仔a11,他每一步可以向右或向下移動,目標是移動到迷宮的出口——右下角ann。  

小hi需要支付的代價包括路徑中經過的所有格仔中的整數之和,以及改變移動方向需要支付的代價。  

小hi第一次改變方向的代價是1,第二次的代價是2,第三次的代價是4,…… 第k次的代價是2k-1。  

請你幫小hi算出要離開迷宮代價最小的路徑,並輸出要支付的代價。

第一行乙個整數n。  (1 ≤ n ≤ 100)  

以下n行每行n個整數,代表矩陣a。  (1 ≤ aij ≤ 100)

從左上角到右下角路徑的最小的代價。

樣例輸入

3  

1 3 5

1 1 2

5 1 1

樣例輸出
9

題意:給乙個n*n的圖,求從左上角到右下角最小權值路徑。 權值為路徑上的權值和 + 2^(拐彎次數)-1

每次移動只能朝右或者朝下前進。

思路:

看到題目只能朝右或者下前進,就想到dp,能寫出狀態轉移方程就比較輕鬆了,當然搜尋也能a。

分橫豎兩種dp,朝右走的每種拐彎次數的權值,和朝下走每種拐彎次數權值。

dpr[a][b][c]  表示在(a,b)拐彎c次,朝右走的最小權值。

dpd[a][b][c]  表示在(a,b)拐彎c次,朝下走的最小權值。

從左上到右下進行dp, pow(i) 表示 2^i

dpr[i][j][k] = minn( dpd[i][j-1][k-1]+pow(k-1) ,  dpr[i][j-1][k] ) + v[i][j];

dpd[i][j][k] = minn( dpd[i-1][j][k] ,  dpr[i-1][j][k-1]+pow(k-1) ) + v[i][j];

轉彎次數極限大概應該是13次,不想細算可以開大一點。

**:

#include#include#define for(a,b,c) for(int a = b; a <= c; a++)

#define inf 0x3f3f3f3f

int v[105][105], dpr[105][105][15], dpd[105][105][15];

int minn(int a, int b)

int pow(int k)

int main()

for(i,2,n)}}

int ans = inf;

for(k,0,13)

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

return 0;

}

170 ActionBar主題配置

我們的androidmnifest.xml 清單檔案裡 theme 主題條目的 然後我們進這個style看看 這個主題 如果我們不想要actionbar,我們可以給他乙個 noactionbar 的主題 我們來個自定義actionbar 的主題,然後給乙個 parent,就是預設的 light主題 ...

XDOJ 170 複試篩選

考研初試成績公布後需要對m個學生的成績進行排序,篩選出可以進入複試的前n名學生。排序規則為首先按照總分排序,總分相同則按英語單科成績排序,總分和英語成績也相同時考號小者排在前面。現給出這m個學生的考研初試成績,請篩選出可以進入複試的n名學生並按照排名從高到低的順序依次輸出。輸入為m 1行,第一行為兩...

Hihocoder 數列問題

給定乙個長度為n數列a a1,a2,an a 1,a 2,a n a1 a2 an 由於某種原因,小ho對這個數列有些不滿意。他希望每個在數列 現的數值,其出現的次數都是唯一的。假設a 1,1,2,2 1和2都出現了2次,小ho就會不滿意。於是小ho決定從a中刪除一些數,使得每個數值出現次數都是唯一...