题目链接

一个n*m的迷宫由‘.’和'b'组成,从(1,1)走到(n,m),只能向右或者向下走,但遇到‘b’时才能改变方向,开始时方向向右。

问到达(n,m)至少改变几个位置上的值

/***********************************************************/

原来转移方程也可以这么优美

每个方格有两个状态,向右和向下

这两个状态均由左边和上边的两个方格四个状态转移得来

#include <set>
#include <map>
#include <stack>
#include <queue>
#include <cmath>
#include <vector>
#include <string>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm> #define MAX(a,b) ((a)>=(b)?(a):(b))
#define MIN(a,b) ((a)<=(b)?(a):(b))
#define OO 0x0fffffff
using namespace std;
#define RIGHT 0
#define DOWN 1 const int N = ;
char maze[N][N];
int dp[N][N][]; int main(){
int n,m;
cin>>n>>m;
for(int i=;i<n;i++) cin>>maze[i];
for(int i=;i<n;i++) maze[i][m] = 'b';
for(int j=;j<m;j++) maze[n][j] = 'b'; dp[][][] = (maze[][]=='b');
dp[][][] = (maze[][]=='b')+(maze[][]!='b');
for(int i=;i<n;i++) for(int j=;j<m;j++){
if(!(i+j)) continue;
dp[i][j][] = dp[i][j][] = OO;
if(j->=){
dp[i][j][] = MIN(dp[i][j-][],dp[i][j-][]+(maze[i+][j-]!='b'));
dp[i][j][] = MIN(dp[i][j-][]+(maze[i][j+]!='b'),dp[i][j-][]+(maze[i+][j-]!='b')+(maze[i][j+]!='b'));
}
if(i->=){
dp[i][j][] = MIN(dp[i][j][],dp[i-][j][]+(maze[i-][j+]!='b')+(maze[i+][j]!='b'));
dp[i][j][] = MIN(dp[i][j][],dp[i-][j][]+(maze[i+][j]!='b'));
dp[i][j][] = MIN(dp[i][j][],dp[i-][j][]+(maze[i-][j+]!='b'));
dp[i][j][] = MIN(dp[i][j][],dp[i-][j][]);
}
dp[i][j][]+=(maze[i][j]!='.');
dp[i][j][]+=(maze[i][j]!='.');
} printf("%d\n",MIN(dp[n-][m-][],dp[n-][m-][]));
return ;
}

hiho150周 - 动态规划*的更多相关文章

  1. 第一周 动态规划Dynamic Programming(一)

    一.概念 动态规划是运筹学的一个分支,是求解决策过程最优化的数学方法.动态规划是通过拆分问题,定义问题状态和状态之间的关系,使得问题能够以递推(或者说分治)的方式去解决. 1.试用情况: 2.解决步骤 ...

  2. 算法复习周------“动态规划之‘最长公共子序列’”&&《计蒜课》---最长公共子串题解

    问题描述: 这个问题其实很容易理解.就是给你两个序列X={x1,x2,x3......xm} Y={y1,y2,y3......ym},要求找出X和Y的一个最长的公共子序列. 例:Xi={A, B, ...

  3. 集训第五周动态规划 I题 记忆化搜索

    Description Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michael想知道 ...

  4. 集训第五周动态规划 H题 回文串统计

    Hrdv is interested in a string,especially the palindrome string.So he wants some palindrome string.A ...

  5. 集训第五周动态规划 G题 回文串

    Description A palindrome is a symmetrical string, that is, a string read identically from left to ri ...

  6. 集训第五周动态规划 D题 LCS

    Description In a few months the European Currency Union will become a reality. However, to join the ...

  7. 集训第五周动态规划 C题 编辑距离

    Description Let x and y be two strings over some finite alphabet A. We would like to transform x int ...

  8. 集训第五周 动态规划 B题LIS

      Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status Des ...

  9. hihocoder第212周-动态规划

    题目链接 import java.util.Scanner; public class Main { long mod = (long) (1e9 + 7); int MAXN = 107; int ...

随机推荐

  1. 用latex画化学结构式

    最近写论文需要画化学结构式,于是想到用Latex里的包.但是一看知乎里面的大牛们一片口诛笔伐,说还是Chemdraw好.用latex是装... 不管怎么说,还是查了一下.首先需要下载chemfig.t ...

  2. Typescript 模拟实现 多继承

    class Animal{ eat():void{ alert("animal eat"); } } class Mamal extends Animal{ breathe() : ...

  3. ZBrush中标准笔刷介绍

    ZBrush最实用.精彩的部分便是雕刻了,笔刷又有时雕刻时必不可少的工具,ZBrush中给我们提供了很多种笔刷,那么,最基础.最常用的笔刷是什么呢,本文内容向大家介绍ZBrush®中标准笔刷以便大家熟 ...

  4. Json扩展 (转)

    https://www.newtonsoft.com/json https://www.cnblogs.com/BrokenIce/p/5902441.html https://blog.csdn.n ...

  5. Java之Object类

    0 引言 Object类是类层次结构的根,Java中所有的类从根本上都继承自这个类.Object类是Java中唯一没有父类的类. 其他所有的类,包括标准容器类,比如数组,都继承了Object类中的方法 ...

  6. Android开发进度04

    1,今日:目标:实现登录和注册功能 2,昨天:完成登录和注册的界面以及后台数据库的操作 3,收获:会使用SQlite数据库的操作语句 4,问题:登录时出现问题(登录不上去)

  7. 再识Quartz

    在之前的项目中使用过Quartz,但都是基于XML配置定义任务的.目前一个项目应用需要对任务进行创建.暂停.删除等动态管理.所以再次在网上翻了翻,再来好好重新认识下Quartz. 名词解释: sche ...

  8. jquery中的jsonp跨域调用(接口)

                                                                           jquery jsonp跨域调用接口

  9. oracle查询表空间的位置

    SELECT * FROM Dba_Data_Files ddf WHERE ddf.tablespace_name = 'TablespaceName'; 以上SQL代码可以查询出表空间的所在路径和 ...

  10. 2015 Multi-University Training Contest 3 hdu 5324 Boring Class

    Boring Class Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Tota ...