题目链接

一个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. 后端向服务器发送客户端请求--HttpWebRequest

    HttpWebRequest类与HttpRequest类的区别 HttpRequest类的对象用于服务器端,获取客户端传来的请求的信息,包括HTTP报文传送过来的所有信息. HttpWebReques ...

  2. Microsoft Edge 首个 Chromium 内核版释出

    翻译功能释出 navigator.userAgent"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, ...

  3. Android 网络状态变化的监听

    1.在流量网页,时实现断网,提醒等功能. 需要权限 <uses-permission android:name="android.permission.INTERNET"/& ...

  4. Mysql-slowlog

    MySQL慢查询日志是MySQL提供的一种日志记录,用来记录执行时长超过指定时长的查询语句,具体指运行时间超过 long_query_time 值的 SQL 语句,则会被记录到慢查询日志中. long ...

  5. Java中使用MD5加密的简单实现

    import java.math.BigInteger; import java.security.MessageDigest; import java.security.NoSuchAlgorith ...

  6. C# 基础复习 三 XML操作

    XML 可扩展标记语言(所有标签都是自己定义,没有固定格式) 如果要给XML规定格式,可以使用dtd (dtd是什么?你不会自己百度吗) XML主要用来存储数据 XML的要求:     根节点只能有一 ...

  7. node——module.exports

    module.exports 1. 在a.js中 var b=require('./b.js'); console.log(b); 在b.js中 function add(x,y){ return x ...

  8. [洛谷P3697]开心派对小火车

    题目:洛谷P3697 题目大意是有各站停列车(慢车,相邻2站时间A)和特急列车(相邻2站时间B),特急列车在特定站点停靠. 现在加一种快速列车(相邻2站时间C,A>C>B),停靠K站(包括 ...

  9. js 如何判断浏览器是否禁用cookie

    语法:navigator.cookieEnabled: 如果浏览器启用了cookie,该属性值为true.如果禁用了cookie,则值为false. navigator: JavaScript中的一个 ...

  10. dfs序题集

    dfs序可以维护一个子树内的信息 需要记录dfs进的时间以及所有子树都遍历完的时间 void dfs(int u, int fa) { L[u] = ++id; for(int i = head[u] ...