hdu 5067 Harry And Dig Machine(dp)
2014-10-23 19:39
387 查看
题目链接:hdu 5067 Harry And Dig Machine
题目大意:给定一个矩阵,一开始位置在左上角,现在要将矩阵上所有非0的位置走一遍,最后回到左上角,问说最短
需要多长步数。
解题思路:因为非0位置最多不超过10,所以用dp[s][i],s为二进制数表示哪些位置走过,i表示最后停留的位置。
题目大意:给定一个矩阵,一开始位置在左上角,现在要将矩阵上所有非0的位置走一遍,最后回到左上角,问说最短
需要多长步数。
解题思路:因为非0位置最多不超过10,所以用dp[s][i],s为二进制数表示哪些位置走过,i表示最后停留的位置。
#include <cstdio> #include <cstring> #include <cstdlib> #include <vector> #include <algorithm> using namespace std; const int maxn = 55; const int INF = 0x3f3f3f3f; typedef pair<int,int> pii; int N, M, g[maxn][maxn], dp[1<<12][12]; vector<pii> vec; inline int dis(int i, int j) { return abs(vec[i].first - vec[j].first) + abs(vec[i].second - vec[j].second); } int solve () { int n = vec.size(); int m = 1<<n; memset(dp, INF, sizeof(dp)); dp[1][0] = 0; for (int i = 1; i < m; i++) { for (int j = 0; j < n; j++) { if (i&(1<<j)) { for (int k = 0; k < n; k++) dp[i|(1<<k)][k] = min(dp[i|(1<<k)][k], dp[i][j] + dis(j, k)); } } } int ret = INF; for (int i = 0; i < n; i++) ret = min(ret, dp[m-1][i] + dis(0, i)); return ret; } int main () { while (scanf("%d%d", &N, &M) == 2) { vec.clear(); for (int i = 0; i < N; i++) { for (int j = 0; j < M; j++) { scanf("%d", &g[i][j]); if (g[i][j] || (i == 0 && j == 0)) vec.push_back(make_pair(i, j)); } } printf("%d\n", solve()); } return 0; }
相关文章推荐
- hdu 5067 Harry And Dig Machine (状态压缩dp)
- hdu 5067 Harry And Dig Machine(状态压缩dp)
- HDU-5067-Harry And Dig Machine(状压DP)
- HDU 5067 Harry And Dig Machine(状压DP)(TSP问题)
- Harry And Dig Machine HDU - 5067 (状压dp)
- HDU 5067 Harry And Dig Machine 状态压缩 DP
- HDU 5067 Harry And Dig Machine(状压dp)
- hdu 5067 Harry And Dig Machine (状态压缩dp)
- HDU 5067 Harry And Dig Machine(状压dp)
- HDU 5067 Harry And Dig Machine(状压DP)(TSP问题)
- HDU 5067 Harry And Dig Machine(状压dp)
- hdu 5067——Harry And Dig Machine
- HDU 5067 Harry And Dig Machine(动态规划+位运算)【双调欧几里得类模板】
- hdu 5067 Harry And Dig Machine
- hdu 5067 Harry And Dig Machine
- HDU 5067 Harry And Dig Machine
- hdu 5067 -- Harry And Dig Machine
- HDOJ 5067 Harry And Dig Machine 状压DP
- hdu 5067 Harry And Dig Machine
- hdu 5067 Harry And Dig Machine(BestCoder Round #14)