递推DP HDOJ 5092 Seam Carving
2015-05-22 18:28
411 查看
题目传送门
/* 题意:从上到下,找最短路径,并输出路径 DP:类似数塔问题,上一行的三个方向更新dp,路径输出是关键 */ #include <cstdio> #include <algorithm> #include <iostream> #include <cstring> #include <cmath> #include <string> #include <vector> #include <queue> #include <map> #include <set> #include <ctime> #include <cstdlib> using namespace std; const int MAXN = 1e2 + 10; const int INF = 0x3f3f3f3f; int a[MAXN][MAXN]; int dp[MAXN][MAXN]; int pre[MAXN][MAXN]; void print(int x, int y) { if (x == 1) { printf ("%d", y); return ; } print (x - 1, pre[x][y]); printf (" %d", y); } int main(void) //HDOJ 5092 Seam Carving { //freopen ("C.in", "r", stdin); int n, m, t, cas = 0; scanf ("%d", &t); while (t--) { scanf ("%d%d", &n, &m); for (int i=1; i<=n; ++i) for (int j=1; j<=m; ++j) scanf ("%d", &a[i][j]); memset (pre, 0, sizeof (pre)); for (int i=2; i<=n; ++i) for (int j=1; j<=m; ++j) dp[i][j] = INF; for (int i=1; i<=m; ++i) dp[1][i] = a[1][i]; for (int i=2; i<=n; ++i) { for (int j=m; j>=1; --j) { for (int k=1; k>=-1; --k) { if (j + k < 1 || j + k > m) continue; if (dp[i][j] > dp[i-1][j+k] + a[i][j]) { dp[i][j] = dp[i-1][j+k] + a[i][j]; pre[i][j] = j + k; } } } } int k = m; int mn = dp [m]; for (int i=m-1; i>=1; --i) { if (mn > dp [i]) {mn = dp [i]; k = i;} } printf ("Case %d\n", ++cas); print (n, k); puts (""); } return 0; } /* Case 1 2 1 1 2 Case 2 3 2 1 1 2 1 */
相关文章推荐
- hdoj5092Seam Carving【dp】
- [HDOJ5092] Seam Carving(DP,记录路径)
- hdoj 5092 Seam Carving 【树塔DP变形 + 路径输出】 【简单题】
- hdoj 5092 Seam Carving 【树塔DP变形 + 路径输出】 【简单题】
- HDOJ 5092 Seam Carving(动态规划,回溯,记录路径)
- 【DP】 HDU 5092 Seam Carving
- HDOJ 5092 Seam Carving DP
- HDU 5092 Seam Carving(DP)
- 【DP】 HDU 5092 Seam Carving
- HDOJ 3664 Permutation Counting / UVALive 5092 DP
- hdu 5092 Seam Carving(DP+记录路径)
- HDU 5092 Seam Carving(上海邀请赛基础DP)
- 递推DP HDOJ 5328 Problem Killer
- [HDOJ6146] Pokémon GO(递推,dp)
- HDU 5092 Seam Carving 递推
- hdu 5092 Seam Carving 简单DP ”水一炮试试“大法
- 递推DP HDOJ 5459 Jesus Is Here
- HDU 5092 Seam Carving (DP+打印路径)
- Hdu 5092 Seam Carving(dp)
- HUD 5092 Seam Carving(递推)