#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的更多相关文章

  1. #417 Div2 C

    #417 Div2 C 题意 给出 n 个货物的基础价格和钱 S ,每个货物的最终价格要加上 购买商品总数 * 商品在原来序列中的序号. 问最多能买多少件,且花费最小. 分析 二分购买商品数量,每次判 ...

  2. #417 Div2 E (树上阶梯博弈)

    #417 Div2 E 题意 给出一颗苹果树,设定所有叶子节点的深度全是奇数或偶数,并且包括根在内的所有节点上都有若干个苹果. 两人进行游戏,每回合每个人可以做下列两种操作中的一种: 每个人可以吃掉某 ...

  3. codeforces round 417 div2 补题 CF 812 A-E

    A Sagheer and Crossroads 水题略过(然而被Hack了 以后要更加谨慎) #include<bits/stdc++.h> using namespace std; i ...

  4. #417 Div2 Problem B Sagheer, the Hausmeister (DFS && 枚举)

    题目链接:http://codeforces.com/contest/812/problem/B 题意 : 给出一个 n (1 ≤ n ≤ 15)层的教学楼, 每一层楼包含 m (1 ≤ m ≤ 10 ...

  5. #417 Div2 Problem C Sagheer and Nubian Market (二分 && std::accumulate)

    题目链接 : http://codeforces.com/problemset/problem/812/C 题意 : 给你 n 件物品和你拥有的钱 S, 接下来给出这 n 件物品的价格, 这些物品的价 ...

  6. bc#54 div2

    用小号做的div2 A:竟然看错了排序顺序...白白WA了两发 注意读入一整行(包括空格):getline(cin,st) [gets也是资瓷的 #include<iostream> us ...

  7. $('div a') 与$('div>a'),.div+.div2与.div~.div2

    $('div a'):div标签下所有层次a元素的jquery对象 $('div>a'):div标签下子元素层次a元素的jquery对象 <body> <div class=' ...

  8. SRM 657 DIV2

    -------一直想打SRM,但是感觉Topcoder用起来太麻烦了.题目还是英文,不过没什么事干还是来打一打好了.但是刚注册的号只能打DIV2,反正我这么弱也只适合DIV2了.. T1: 题目大意: ...

  9. 无法解析此远程名称: 'www.***.com' 解决办法 请求因 HTTP 状态 417 失败

    今天在做接口开发时,遇到了一个异常:无法解析此远程名称: 'www.***.com'.我的网站一直是运行正常的,从昨天开始出现异常,用户可以使用,但我的服务器怎么也无法实现对数据库的更新. 分析原因: ...

随机推荐

  1. git工具使用的简单介绍

    百度百科 写道 Git是一款免费.开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目. Git的读音为/gɪt/. Git是一个开源的分布式版本控制系统,用以有效.高速的处理从很小到非常大 ...

  2. 【割点】【割边】tarjan

    洛谷割点模板题--传送门 割边:在连通图中,删除了连通图的某条边后,图不再连通.这样的边被称为割边,也叫做桥.割点:在连通图中,删除了连通图的某个点以及与这个点相连的边后,图不再连通.这样的点被称为割 ...

  3. .Net MVC4笔记之Razor视图引擎的基础语法

    Razor视图引擎的基础语法: 1.“_”开头的cshtml文档将不能在服务器上访问,和asp.net中的config文档差不多. 2.Razor语法以@开头,以@{}进行包裹. 3.语法使用: 注释 ...

  4. java复习(2)---java基础杂记

    java命名规范: 参考:http://www.cnblogs.com/maowang1991/archive/2013/06/29/3162366.html 1.项目名小写 2.包名小写 3.类名每 ...

  5. [No0000E9]Microsoft Help Viewer 2.3绿色版

    今天没事,提取了一下2017的Microsoft Help Viewer 2.3绿色版,自测没发现什么问题,有问题请后补. 下载地址:http://files.cnblogs.com/files/Ch ...

  6. 本学期微分方程数值解课程总结(matlab代码)

    最简单求解一个微分方程数值解得方法:Euler法 function [x,y]=Euler_method(dufun,span,h,x0,y0) %EuLer格式, %求解方程y'=dufun(x,y ...

  7. C#网络程序设计(1)网络编程常识与C#常用特性

        网络程序设计能够帮我们了解联网应用的底层通信原理!     (1)网络编程常识: 1)什么是网络编程 只有主要实现进程(线程)相互通信和基本的网络应用原理性(协议)功能的程序,才能算是真正的网 ...

  8. cmd中添加snmpd被控

    在cmd中添加snmpd被控,减少手动操作步骤. net stop sharedaccess reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\s ...

  9. Javascript中call和apply

    在上一章http://www.cnblogs.com/meiyh/p/6207671.html 我有提到javascript很重要的this关键字,现在我们结合这个关键字使用的下面的两个关键字: ca ...

  10. 关于特殊文件权限:suid、sgid和sticky-bit

    用 ls –l 命令时,能看到三个八进制数字,表示文件的权限.其实文件的权限应该用4个八进制文件来表示,没有显示的那个是第一位,用来设定一些特殊的权限,这个八进制数字的三个位是:SUID.SGID.s ...