#417 Div2 B
#417 Div2 B
题意
给定一个01矩阵表示一幢楼,左右两侧是楼梯,中间是房间,1代表那个房间开灯,0代表关灯,现在某人从1层左端楼梯开始关掉所有灯,当移动某一层时,必须关掉当前层所有灯才能移动到下一层,每次在楼层间或房间间移动耗费时间为1,关灯不需要时间,问最短时间花费。
分析
移动某一层时,必须关掉当前层所有灯才能移动到下一层,所以移动到下一层的位置一定是最左端或最右端有灯的房间(如果当前层没有灯的话继续向下移动)。
DP,当然记忆化无脑搜一下就好。
code
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MAXN = 1e5 + 10;
int a[20][110], dp[20][110];
int L[20], R[20];
int n, m;
void dfs(int x, int y, int res) {
if(res > dp[x][y]) {
return;
}
dp[x][y] = res;
int x_ = x + 1;
while(x_ <= n && L[x_] == -1) {
x_++;
}
if(x_ == n + 1) return;
if(x == 0) {
if(x_ == 1) dfs(x_, R[x_], res + R[x_] - 1);
else {
dfs(x_, R[x_], res + x_ - x - 1 + R[x_] - 1);
dfs(x_, L[x_], res + x_ - x - 1 + m + 1 + m + 2 - L[x_]);
}
} else {
dfs(x_, L[x_], res + m + 2 - L[x_] + m + 2 - y + x_ - x);
dfs(x_, R[x_], res + R[x_] - 1 + y - 1 + x_ - x);
}
}
int main() {
cin >> n >> m;
memset(L, -1, sizeof L);
for(int i = 0; i < 20; i++) {
for(int j = 0; j < 110; j++) {
dp[i][j] = 1e9;
}
}
for(int i = n; i >= 1; i--) {
string s;
cin >> s;
for(int j = 1; j <= m + 2; j++) {
a[i][j] = s[j - 1] - '0';
if(a[i][j] && L[i] == -1) L[i] = j;
if(a[i][j]) R[i] = j;
}
}
dfs(0, 0, 0);
int flg = 0;
for(int i = n; i >= 0; i--) {
if(L[i] != -1) {
cout << min(dp[i][L[i]], dp[i][R[i]]) << endl;
flg = 1;
break;
}
}
if(!flg) cout << 0 << endl;
return 0;
}
#417 Div2 B的更多相关文章
- #417 Div2 C
#417 Div2 C 题意 给出 n 个货物的基础价格和钱 S ,每个货物的最终价格要加上 购买商品总数 * 商品在原来序列中的序号. 问最多能买多少件,且花费最小. 分析 二分购买商品数量,每次判 ...
- #417 Div2 E (树上阶梯博弈)
#417 Div2 E 题意 给出一颗苹果树,设定所有叶子节点的深度全是奇数或偶数,并且包括根在内的所有节点上都有若干个苹果. 两人进行游戏,每回合每个人可以做下列两种操作中的一种: 每个人可以吃掉某 ...
- codeforces round 417 div2 补题 CF 812 A-E
A Sagheer and Crossroads 水题略过(然而被Hack了 以后要更加谨慎) #include<bits/stdc++.h> using namespace std; i ...
- #417 Div2 Problem B Sagheer, the Hausmeister (DFS && 枚举)
题目链接:http://codeforces.com/contest/812/problem/B 题意 : 给出一个 n (1 ≤ n ≤ 15)层的教学楼, 每一层楼包含 m (1 ≤ m ≤ 10 ...
- #417 Div2 Problem C Sagheer and Nubian Market (二分 && std::accumulate)
题目链接 : http://codeforces.com/problemset/problem/812/C 题意 : 给你 n 件物品和你拥有的钱 S, 接下来给出这 n 件物品的价格, 这些物品的价 ...
- bc#54 div2
用小号做的div2 A:竟然看错了排序顺序...白白WA了两发 注意读入一整行(包括空格):getline(cin,st) [gets也是资瓷的 #include<iostream> us ...
- $('div a') 与$('div>a'),.div+.div2与.div~.div2
$('div a'):div标签下所有层次a元素的jquery对象 $('div>a'):div标签下子元素层次a元素的jquery对象 <body> <div class=' ...
- SRM 657 DIV2
-------一直想打SRM,但是感觉Topcoder用起来太麻烦了.题目还是英文,不过没什么事干还是来打一打好了.但是刚注册的号只能打DIV2,反正我这么弱也只适合DIV2了.. T1: 题目大意: ...
- 无法解析此远程名称: 'www.***.com' 解决办法 请求因 HTTP 状态 417 失败
今天在做接口开发时,遇到了一个异常:无法解析此远程名称: 'www.***.com'.我的网站一直是运行正常的,从昨天开始出现异常,用户可以使用,但我的服务器怎么也无法实现对数据库的更新. 分析原因: ...
随机推荐
- 纯JS实现图片验证码功能并兼容IE6-8
最近要搞一个图片验证码功能,但是又不想自己写后台代码.于是自己准备搞一个纯前端的验证码功能,于是网上搜索了一下,找到一个插件gVerify.js,简单好用,实现完美.不过后面接到说要兼容IE8,想想也 ...
- tcp并发服务端
TCP并发服务器:并发服务器的思想是每一个客户端的请求并不由服务器的主进程直接处理,而是服务器主进程创建一个子进程来处理. 创建TCP并发服务器的算法如下: socket(……): //创建一个TCP ...
- R中基本统计图
一.条形图 1.安装包install.packages("vcd"); library(vcd);count<-table(Arthritis$Improved);#tabl ...
- log4j的Appenders配置
因为是刚开始使用log4j,很多配置方面的东西都不懂,记录下. 下面是我用STS(Spring Tool Suite)新建Spring MVC项目的时候,帮我自动生成的一个log4j.xml配置文件. ...
- python 错误之SyntaxError: Missing parentheses in call to 'print'
SyntaxError: Missing parentheses in call to 'print' 由于python的版本差异,造成的错误. python2: print "hello ...
- 【算法系列学习】线段树 单点覆盖,区间查询最大值 [kuangbin带你飞]专题七 线段树 B - I Hate It
https://vjudge.net/contest/66989#overview #include<iostream> #include<cstdio> #include&l ...
- RedHat 7.1 下安装 Zabbix监控程序详解(适合linux初级用户)
RedHat 7.1 安装 Zabbix 监控程序详解(适合对linux初级用户)2017-05-02 安装步骤: 1.zabbix需要安装LAMP架构 2.安装zabbix服务 3.初始化zabbi ...
- Eclipse 如何添加Window Builder插件?
http://www.eclipse.org/windowbuilder/download.php 找到对应版本的window builder 如果不知道版本的话,可以在你的Eclipse-help- ...
- 谷歌广告Admob在cocos2dx上通过回调实现底部Banner
首先说明我的开发平台,以免由于平台问题造成不必要的误解: cocos2dx-3.4 ndk-r9d eclipse Admob是谷歌官方广告,已经集成在google_play_service_lib包 ...
- Android学习资料整理
1.官方网站 http://developer.android.com/index.html http://android-developers.blogspot.com/ 2.Android Des ...