時間限制:
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中刪除一些數,使得每個數值出現次數都是唯一...