hihocoder 1290 DP
题目利用DP思想,dp[i][j][k]
表示robot跑到i
行j
列目前移动方向为k
时,所需要的最小的flip。其中0 <= i <= N
,0 <= j <= M
,k = right/down
dp[i][j][right] 可由dp[i][j-1][right]右移和dp[i-1][j][down]下移两种情况得到:
1. dp[i][j-1][right]右移一步,到dp[i][j][right],若maze[i][j] == 'b',则dp[i][j][right]=dp[i][j-1][right] +1;
2. dp[i-1][j][down]下移时,需要改变方向,先下移一步到第i行j列,此时方向是向下的,要变为向右,需考虑maze[i+1][j],若i+1==n(边界)或者maze[i+1][j] == 'b',则表示向下行不通,便直接改变方向向右;若第i+1行j列可以走的话,需将其变为'b',使其行不通,才能改变方向为向右。故可表示为以下公式:
dp[i][j][right] = min(dp[i][j-1][right], dp[i-1][j][down] + (i+1 < n && maze[i+1][j] != 'b')) + (maze[i][j] == 'b');
dp[i][j][down]同理如下;
dp[i][j][down] = min(dp[i-1][j][down], dp[i][j-1][right] + (j+1 < m && maze[i][j+1] != 'b')) + (maze[i][j] == 'b');
#include <iostream>
#include <vector>
#include <algorithm>
#include<map>
#include<vector>
#include<queue>
#include<string>
#include<set>
#include<cmath>
#include<cstdio>
#include<sstream>
#include<cstring>
//#pragma warning(disable:4996)
using namespace std;
#define MAXN 50001
#define INF INT_MAX
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
#define L(a) ((a)<<1)
#define R(a) (((a)<<1)+1)
int n, m;
int dp[105][105][2];
char a[105][105];
int cal() {
//0表示right ,1 表示down
dp[0][0][0] = (a[0][0] == 'b');
dp[0][0][1] = dp[0][0][0] + (1 < m&&a[0][1] != 'b');
for (int i = 1; i < n; ++i) {
dp[i][0][1] = min(dp[i - 1][0][0] + (1 < m&&a[i - 1][1] != 'b'), dp[i - 1][0][1]) + (a[i][0] == 'b');
dp[i][0][0] = dp[i][0][1] + (i + 1 < n&&a[i + 1][0] != 'b');
}
for (int i = 1; i < m; ++i) {
dp[0][i][0] = min(dp[0][i - 1][0], dp[0][i - 1][1] + (1 < m&&a[1][i - 1] != 'b')) + (a[0][i] == 'b');
dp[0][i][1] = dp[0][i][0] + (i + 1 < m&&a[0][i + 1] != 'b');
}
for (int i = 1; i < n; ++i) {
for (int j = 1; j < m; ++j) {
dp[i][j][0] = min(dp[i][j - 1][0], dp[i - 1][j][1] + (i + 1 < n && a[i + 1][j] != 'b')) + (a[i][j] == 'b');
dp[i][j][1] = min(dp[i - 1][j][1], dp[i][j - 1][0] + (j + 1 < m && a[i][j + 1] != 'b')) + (a[i][j] == 'b');
}
}
return min(dp[n - 1][m - 1][0], dp[n - 1][m - 1][1]);
}
int main()
{
while (cin >> n >> m) {
for (int i = 0; i < n; ++i) {
for (int j = 0; j < m; ++j) {
cin >> a[i][j];
}
}
cout << cal() << endl;
}
return 0;
}
hihocoder 1290 DP的更多相关文章
- ACM学习历程—Hihocoder 1290 Demo Day(动态规划)
http://hihocoder.com/problemset/problem/1290 这题是这次微软笔试的第三题,过的人比第一题少一点,这题一眼看过去就是动态规划,不过转移方程貌似不是很简单,调试 ...
- hihocoder #1290 : Demo Day
传送门 #1290 : Demo Day 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 You work as an intern at a robotics star ...
- CSU 1290 DP解决数学期望问题
题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1290 题目大意: 给定k个数,每次可以生成0-N-1中的任何一个数,k个数中出现不同的整 ...
- hihocoder #1290 : Demo Day (2016微软编程测试第三题)
#1290 : Demo Day 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 You work as an intern at a robotics startup. ...
- hihocoder 1580 dp最大子矩阵和
题意: 给出n*m的矩阵求最大子矩阵和,要求必须把矩阵中的某一个元素替换成p 代码: //求最大子矩阵和,容易想到压缩之后dp但是这道题要求必须替换一次p,必然优先替换最小的. //这样如果求得的结果 ...
- XDOJ
1000.a+b. #include<bits/stdc++.h> using namespace std; int a,b; int main() { ios::sync_with_st ...
- hihoCoder 1043 完全背包 (dp)
http://hihocoder.com/problemset/problem/1043 动态转移方程 :for v=cost..V f[v]=max(f[v],f[v-c[i]]+w[i]); #i ...
- hihocoder #1300 : 展胜地的鲤鱼旗 dp
题目链接: http://hihocoder.com/problemset/problem/1300 题解: 先用栈预处理出每个‘)’匹配的‘(’的位子,放在pos数组中. dp[i]表示以i结尾的合 ...
- hihocoder #1301 : 筑地市场 数位dp+二分
题目链接: http://hihocoder.com/problemset/problem/1301?sid=804672 题解: 二分答案,每次判断用数位dp做. #include<iostr ...
- [hihocoder 1033]交错和 数位dp/记忆化搜索
#1033 : 交错和 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描写叙述 给定一个数 x,设它十进制展从高位到低位上的数位依次是 a0, a1, ..., an - 1 ...
随机推荐
- 百度云原生数据库GaiaDB的HTAP与多地多活技术实践
摘要:云原生数据库在使用存算分离技术后,可以在完全兼容MYSQL协议和语法的情况下,极大提升单实例所能承载的数据规模与吞吐能力上限.但除了对客户端兼容外,对整个数据生态(地域容灾,数据分析,备份恢复) ...
- 【LeetCode双向链表】LRU详解,双向链表实战
LRU缓存 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构. 实现 LRUCache 类: LRUCache(int capacity) 以 正整数 作为容量 capacity ...
- ODOO升级可能遇到问题
a,找不到模块或视图不存在. 解决方案:查看是否将相应py文件加入到__init__文件中,或xml文件加入到manifest->data文件中. b, 找不到关联模块. 解决方案:这种一般要么 ...
- Ubuntu 对比 CentOS 后该如何选择?
大家阅读完以上文章觉得如何选择更适合自己?欢迎留言哦~ 本文章转载自 Linux 就该这么学(ID: linuxprobe),文章图片与文字版权属源公众号所有,未经允许,禁止二次转载. 我要投稿 本公 ...
- gateway异常:DefaultDataBuffer cannot be cast to org.springframework.core.io.buffer.NettyDataBuffer
启动gateway后 出现java.lang.ClassCastException: org.springframework.core.io.buffer.DefaultDataBufferFacto ...
- 混沌演练状态下,如何降低应用的 MTTR(平均恢复时间)
在企业业务领域,锦礼是针对福利.营销.激励等员工采购场景的一站式解决方案,包含面向员工.会员等弹性激励SAAS平台.由于其直接面向公司全体员工,其服务的高可用尤其重要,本文将介绍锦礼商城大促前夕,通过 ...
- To ChatGPT:让你更加随意地使用所有ChatGPT应用
现在其实已经有很多在线的llm服务了,当然也存在许多开源部署方案,但是不知道大家有没有发现一个问题,目前基于ChatGPT开发的应用,都是使用的OpenAI的接口.换句话说,如果没有OpenAI账号, ...
- CF1832F Zombies
简要题意 给定 \(n\) 个左闭右开的区间 \(A_i = [L_i, R_i)\),其中 \(0\le L_i < R_i \le x\),你可以自由选择 \(k\) 个长度为 \(m\) ...
- 基于html2canva jspdf 实现前端页面加水印 并导出页面PDF
基于html2canva jspdf 实现前端页面加水印 并导出页面PDF; 下载完整代码请访问uni-app插件市场地址:https://ext.dcloud.net.cn/plugin?id=12 ...
- 10. Mybatis的缓存
1. Mybatis 的一级缓存 一级缓存是 SqlSession 级别的,通过同一个 SqlSession 查询的数据会被缓存,下次查询相同的数据,就会从缓存中直接获取,不会从数据库重新访问 , ...