20 穿越矩陣
現在有乙個 m * n 的整數矩陣,每一格上有乙個數字。請你編寫乙個程式計算出一條從左到右穿過矩陣的路徑,並使此路徑的費用最小。路徑的花費是指這條路徑所穿越的所有單元格中的數字之和。
路徑從矩陣的左側的第一列的任意單元格開始,逐步穿過矩陣到達最右側的一列的任意單元格。每一步是指從某單元格進入它右側一列的相鄰單元格(如下圖,可以是橫向或斜向)。矩陣的第一行和最後一行實際是相鄰的,你可以想象矩陣是包裹在乙個橫放的圓柱體外面。
穿越兩個略有不同的 5 * 6 的矩陣的路徑如下圖所示,這兩個矩陣只有最後一行的數字不同。右側的路徑顯示了第一行和最後一行相鄰的效果。
輸入包括一系列矩陣描述。每個矩陣描述的第一行是 m 和 n,即矩陣的行數和列數;之後的 m 行,每行包括 n 個以空格分開的整數,則是當前矩陣的值,注意矩陣的值未必是正數。
矩陣的行數 m 和列數 n 的範圍是:1 <= m <= 10、 1 <= n <= 100;所有路徑的費用值都可以用 30bit 的整數表示。
針對每乙個矩陣,找出費用最小的路徑,並將其輸出。每個矩陣的輸出包括兩行,第一行是路徑本身,即輸出每一步所在的行,第二行則是該路徑的費用。
如果對於同乙個矩陣有多條不同的費用最小路徑,則輸出左端行號較小的一條。
5 63 4 1 2 8 6
6 1 8 2 7 4
5 9 3 9 9 5
8 4 1 3 2 6
3 7 2 8 6 4
5 63 4 1 2 8 6
6 1 8 2 7 4
5 9 3 9 9 5
8 4 1 3 2 6
3 7 2 1 2 3
1 2 3 4 4 5
161 2 1 5 4 5
11從後往前動態規劃。然後開乙個陣列記錄路徑就好。
#include#include#define inf 0x7fffffff
int map[200][200];
int ans[200][200];
int path[200][200];
int m, n;
int check(int x, int y)
if (ans[x + 1][x1[i]] < k1)
}return k;
}int main()
} for (i = n ;i > 0;i--)
}debug to be continue
//find the min
for (j = 1;j <= m;j++)
}flag = ans_j;
for (i = 1;i <= n;i++)
printf("\n");
printf("%d\n", ans[1][ans_j]);
} }
BIT2014級軟體學院程式設計 10 的統計
眾所周知,琪露諾 cirno 是幻想郷 中首屈一指的天才,可以說 就是她的代名詞。然而如今,她遇到了乙個和 有關的難題。你能幫助她麼?題目是這樣的,給出兩個數 a 和 b 0 a b 10 10000 求 a 到 b 之間 包括a和b 的數字中,有多少個數字是包含9的 例如 19,910 等都是包含...
BIT2014級軟體學院程式設計 12 程式設計珠璣
你有一條項鍊,它由 n 個隨機排列的紅 白和藍色的珠子組成 3 n 350 下面的例子展示了兩條 n 29 時的項鍊 1 2 1 2 r b b r b r r b r b b b r r b r r r w r b r w w b b r r b b b b b b r b r r b r b r...
寫給我的2014級學生
時間過得很快,你們的寒假來到了,你們已經完整地度過了大學的第乙個學期,恭喜。談談我和大家的交集 程式設計。回想我們的開端 給你們演示乙個 hello world 也能激起大家的驚嘆,到你們乙個個都能做出來個人所得稅計算器 大獎賽計分器 電子詞典,部落格中的積累 oj上的狂刷,充實了整個的學期。呃,老...