题目链接:http://codeforces.com/contest/812/problem/B

题意:n层楼,每层有m个房间,左右两边是楼梯,输入一个n*(m+2)的字符串,字符1代表这个房间灯亮。要想关闭上层的等,低层的灯必须全部关闭。现在问你关闭所有的灯最少移动多少次。

分析:动态规划或者dfs都可以。dp[i][0]代表到达第i层的左边楼梯最短移动,dp[i][1]代表到达第i层的右边楼梯的最短移动。初始化dp[1][0]=0,dp[1][1]=m+1;

    dp[i][0]=min(dp[i-1][0]+r[i-1]*2,dp[i-1][1]+m+1)+1;

    dp[i][1]=min(dp[i-1][1]+(m+1-l[i-1])*2,dp[i-1][0]+m+1)+1;

    然后dp递推到需要关灯的最高层即可(如果那一层以上再没有需要关的灯即为最高层)。最高层的移动不需要再回来,只需要关灯就行。

AC代码:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3
 4 char a[20][105];
 5 int l[20],r[20];
 6 int dp[20][2];
 7 int main() {
 8     ios_base::sync_with_stdio(0);
 9     cin.tie(0);
10     int n,m;
11     memset(a,'0',sizeof(a));
12     memset(l,0,sizeof(l));
13     memset(r,0,sizeof(r));
14     memset(dp,0,sizeof(0));
15     cin>>n>>m;
16     for(int i=n;i>=1;i--){
17         for(int j=0;j<=m+1;j++){
18             cin>>a[i][j];
19             if(a[i][j]=='1'){
20                 r[i]=j;
21                 if(l[i]==0){
22                     l[i]=j;
23                 }
24             }
25         }
26     }
27     int high=n;
28     for(int i=n;i>0;i--){
29         if(l[i]==0&&r[i]==0){
30             high--;
31         }
32         else break;
33     }
34     dp[1][0]=0;
35     dp[1][1]=m+1;
36     for(int i=2;i<=high;i++){
37         if(l[i-1]==0&&r[i-1]==0){
38             dp[i][0]=min(dp[i-1][0],dp[i-1][1]+m+1)+1;
39             dp[i][1]=min(dp[i-1][1],dp[i-1][0]+m+1)+1;
40         }
41         else {
42             dp[i][0]=min(dp[i-1][0]+r[i-1]*2,dp[i-1][1]+m+1)+1;
43             dp[i][1]=min(dp[i-1][1]+(m+1-l[i-1])*2,dp[i-1][0]+m+1)+1;
44         }
45     }
46     int result;
47     result=min(dp[high][0]+r[high],dp[high][1]+(m+1-l[high]));
48     cout<<result<<endl;
49
50
51 return 0;
52 }

View Code

转载于:https://www.cnblogs.com/ls961006/p/6931793.html

codeforces 812B. Sagheer, the Hausmeister相关推荐

  1. Codeforces 题目合集+分类+代码 【Updating...】【361 in total】

    961A - Tetris                                                模拟                                      ...

  2. codeforces:812(div2):总结

    前言 比较水的一场比赛 E题几乎是一本通原题而我还是不会做qwq A - Sagheer and Crossroads 有一个十字路口,给出四个路口的车是否可以左转/右转/直行,并且给出每个路口的行人 ...

  3. 【codeforces 812C】Sagheer and Nubian Market

    [题目链接]:http://codeforces.com/contest/812/problem/C [题意] 给你n个物品; 你可以选购k个物品;则 每个物品有一个基础价值; 然后还有一个附加价值; ...

  4. Codeforces Round #417:E. FountainsSagheer and Apple Tree(树上博弈)

    Codeforces Round #417:E. FountainsSagheer and Apple Tree(树上博弈) 标签: codeforces 2017-06-02 11:41 29人阅读 ...

  5. CodeForces 375D Tree and Queries

    传送门:https://codeforces.com/problemset/problem/375/D 题意: 给你一颗有根树,树上每个节点都有其对应的颜色,有m次询问,每次问你以点v为父节点的子树内 ...

  6. 「日常训练」Bad Luck Island(Codeforces Round 301 Div.2 D)

    题意与分析(CodeForces 540D) 是一道概率dp题. 不过我没把它当dp做... 我就是凭着概率的直觉写的,还好这题不算难. 这题的重点在于考虑概率:他们喜相逢的概率是多少?考虑超几何分布 ...

  7. CodeForces 获得数据

    针对程序的输出可以看见 CodeForces :当输入.输出超过一定字符,会隐藏内容 所以:分若干个程序进行输入数据的获取 1. 1 for (i=1;i<=q;i++) 2 { 3 scanf ...

  8. codeforces水题100道 第二十七题 Codeforces Round #172 (Div. 2) A. Word Capitalization (strings)...

    题目链接:http://www.codeforces.com/problemset/problem/281/A 题意:将一个英文字母的首字母变成大写,然后输出. C++代码: #include < ...

  9. CodeForces 595A

    题目链接: http://codeforces.com/problemset/problem/595/A 题意: 一栋楼,有n层,每层有m户,每户有2个窗户,问这栋楼还有多少户没有睡觉(只要一个窗户灯 ...

  10. codeforces A. Jeff and Digits 解题报告

    题目链接:http://codeforces.com/problemset/problem/352/A 题目意思:给定一个只有0或5组成的序列,你要重新编排这个序列(当然你可以不取尽这些数字),使得这 ...

最新文章

  1. SAP零售业解决方案
  2. 走你!Github 开源整合
  3. Tomcat绿色版启动startup.bat一闪问题的解决方法!
  4. 融合BI+AI,新一代增强型数据分析让制造企业高效解决故障预测分析问题
  5. Deepin、Debian、Ubuntu恢复误删除的/var/lib/dpkg
  6. Spring Security与Maven教程
  7. Github pull request 工作流总结
  8. c# 中const 和 static readonly 的区别
  9. swift中的只读属性实现,很简单
  10. Windows cmd终端美化:Windows terminal背景图
  11. 解决win2003默认不能使用移动硬盘的问题
  12. linux命令last格式,Linux last和lastlog命令:查看过去登陆的用户信息
  13. 承认吧,你就是不行!
  14. 选择语句详解(C++)
  15. 计算器是不是电子计算机,计算器和计算机的区别?
  16. 3.windows图形界面
  17. zabbix agent安装配置
  18. Linux中hadoop下载安装及环境配置
  19. 大数据——MapReduce基础(MapReduce概念)
  20. 一个计算机爱好者眼里的隐私

热门文章

  1. 使用Eclipse开发Java EE应用
  2. c#中跨线程调用windows窗体控件
  3. BZOJ1023 SHOI2008 仙人掌图 仙人掌、单调队列
  4. centos 添加快捷
  5. Sorting a Three-Valued Sequence
  6. bzoj4332;vijos1955:JSOI2012 分零食
  7. 终于搞定了cxgrid的多行表头(转终于搞定了cxgrid的多行表头 )
  8. 【转】Java多线程面试问题集锦
  9. 关于opacity、visibility、display属性的一道CSS面试题
  10. 分布式作业 Elastic Job 如何动态调整?