LightOJ 1057 - Collecting Gold (状压dp)

原创 2015年11月21日 04:22:49

题意:

nm(n,m<20)15,x,

分析:

dp[x][y][s]:=(x,y)s,
x15tsp,,,8
dp[p][s]:=(x),xs,

代码:

//
//  Created by TaoSama on 2015-11-20
//  Copyright (c) 2015 TaoSama. All rights reserved.
//
//#pragma comment(linker, "/STACK:1024000000,1024000000")
#include <algorithm>
#include <cctype>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iomanip>
#include <iostream>
#include <map>
#include <queue>
#include <string>
#include <set>
#include <vector>

using namespace std;
#define pr(x) cout << #x << " = " << x << "  "
#define prln(x) cout << #x << " = " << x << endl
const int N = 1e5 + 10, INF = 0x3f3f3f3f, MOD = 1e9 + 7;

int n, m, dp[16][1 << 16];
int g, x[16], y[16];
char s[25][25];

int getdis(int i, int j) {
    return max(abs(x[i] - x[j]), abs(y[i] - y[j]));
}

int dfs(int p, int s) {
    int& ret = dp[p][s];
    if(~ret) return ret;
    if(p == 0 && s == (1 << g) - 1) return 0;
    ret = INF;
    for(int i = 0; i < g; ++i) {
        if(s >> i & 1) continue;
        ret = min(ret, dfs(i, s | 1 << i) + getdis(p, i));
    }
    return ret;
}

int main() {
#ifdef LOCAL
    freopen("C:\\Users\\TaoSama\\Desktop\\in.txt", "r", stdin);
//  freopen("C:\\Users\\TaoSama\\Desktop\\out.txt","w",stdout);
#endif
    ios_base::sync_with_stdio(0);

    int t; scanf("%d", &t);
    int kase = 0;
    while(t--) {
        scanf("%d%d", &n, &m);
        g = 1;
        for(int i = 1; i <= n; ++i) {
            scanf("%s", s[i] + 1);
            for(int j = 1; j <= m; ++j) {
                if(s[i][j] == 'x') x[0] = i, y[0] = j;
                if(s[i][j] == 'g') x[g] = i, y[g++] = j;
            }
        }
        memset(dp, -1, sizeof dp);
        printf("Case %d: %d\n", ++kase, dfs(0, 0));
    }
    return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

LightOJ-1057-状压dp,记忆化

题目大意:有一张n*m的图,上面有一个起始点x,和最多15个金子g,每一步你可以走到相邻的8个格子,题目要求走完所有的金子并且返回初始点的最小路径是多少; 题目解析:状态压缩,定义dp[i][j]表...

1030 - Discovering Gold (lightoj 1030 概率DP)

1030 - Discovering Gold PDF (English) Statistics Forum Time L...

lightoj 1030 Discovering Gold 概率dp

题目: You are in a cave, a long cave! The cave can be represented by a 1 x N grid. Each cell of...
  • Na_OH
  • Na_OH
  • 2017年04月19日 01:09
  • 144

lightOJ Discovering Gold(期望DP入门)

期望DP理解:http://kicd.blog.163.com/blog/static/126961911200910168335852/kuangbin期望DP练习题: http://www.cn...

LightOJ1030---Discovering Gold(概率dp)

You are in a cave, a long cave! The cave can be represented by a 1 x N grid. Each cell of the cave c...

【期望dp】LightOJ 1030 Discovering Gold

http://acm.hust.edu.cn/vjudge/contest/view.action?cid=84305#problem/B 期望dp,跟之前一篇文章飞行棋的很像,注意i+j>N情...

lightoj 1030 Discovering Gold (基础概率dp)

lightoj 1030 Discovering Gold (基础概率dp)

lightoj1030 - Discovering Gold【概率dp求期望】

1030 - Discovering Gold     PDF (English) Statistics Forum Time Limit: ...

lightoj 1037 - Agent 47 状压DP

杀手47游戏背景,有n个目标要杀死,初始手枪一次射击对敌人造成一点伤害,可以用杀死过的敌人的武器杀敌,dps[i][j]是第i个人的武器对第j个人的伤害,问杀完目标需要开多少枪。 范围15,状压DP...

lightoj 1011 Marriage Ceremonies (状压dp)

lightoj 1011 Marriage Ceremonies (状压dp)
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:LightOJ 1057 - Collecting Gold (状压dp)
举报原因:
原因补充:

(最多只允许输入30个字)