二维动态规划。和某一道leetcode的题目差不多。就是多了blocks的数组或集合。

本次解题的心得有:1.根据题意使用集合表示阻碍;2.使用字符串的形式表示整数的pair,简洁明了;3.p1到p2的阻碍其实是双向的;4.可以不用首行首列的全0;5.mx[i][j]和mx[i-1][j]和mx[i-1][j]可以分别加的。

import java.util.*;public class AvoidRoads
{public long numWays(int width, int height, String[] bad) {HashMap<String,HashSet<String>> blocks = new HashMap<String,HashSet<String>>();for (String badStr : bad) {String[] bl = badStr.split(" ");int x1 = Integer.parseInt(bl[0]);int y1 = Integer.parseInt(bl[1]);int x2 = Integer.parseInt(bl[2]);int y2 = Integer.parseInt(bl[3]);String p1 = "" + x1+ ":" + y1;String p2 = "" + x2 + ":" + y2;// p1 -> p2 && p2-> p1 are blockedif (!blocks.containsKey(p1)) {HashSet<String> set = new HashSet<String>();blocks.put(p1, set);}if (!blocks.containsKey(p2)) {HashSet<String> set = new HashSet<String>();blocks.put(p2, set);}blocks.get(p1).add(p2);blocks.get(p2).add(p1);}long mx[][] = new long[width+1][height+1];for (int i = 0; i < width+1; i++) {for (int j = 0; j < height+1; j++) {if (i == 0 && j == 0) {mx[i][j] = 1;}else {String s0 = ""+i+":"+j;String s1 = ""+(i-1)+":"+j;String s2 = ""+i+":"+(j-1);if (i > 0 && !(blocks.containsKey(s1) && blocks.get(s1).contains(s0))) {mx[i][j] += mx[i-1][j];}if (j > 0 && !(blocks.containsKey(s2) && blocks.get(s2).contains(s0))) {mx[i][j] += mx[i][j-1];}}}}return mx[width][height];}
}

  

转载于:https://www.cnblogs.com/lautsie/p/3258732.html

[topcoder]AvoidRoads相关推荐

  1. *[topcoder]TheTree

    http://community.topcoder.com/stat?c=problem_statement&pm=12746&rd=15703 这道题有意思.给了树的根和每层节点的个 ...

  2. TopCoder 入门教程 -- sqybi完善版

    本文根据经典的TC教程完善和改编. TopCoder:http://www.topcoder.com/ 基本规则 TopCoder的比赛类型很多,最常见的是周赛SRM(Single Round Mat ...

  3. TOPCODER SAM 686 div1 300

    // TOPCODER SAM 686 div1 300 Problem Statement 带有小中括号的括号序列,问可以去掉多少子串,使得剩下的非空串是合法的. Constraints 字符串长度 ...

  4. Topcoder SRM 697题解

    Topcoder SRM 697题解 D1L1 分子分母同乘a[i]: \(a_{i}^{b_{i}+1} mod \prod a_i = 0\) 然后我们考虑质因子p,设质因子p在a[i]中出现cn ...

  5. Topcoder Srm 671 Div2 1000 BearDestroysDiv2

    \(>Topcoder \space Srm \space 671 \space Div2 \space 1000 \space BearDestroysDiv2<\) 题目大意 : 有一 ...

  6. TopCoder入门教程

    from http://hi.baidu.com/juart/blog/item/e0ef838b705eb9d4fd1f1039.html 基本规则 TopCoder的比赛类型很多,最常见的是周赛S ...

  7. Ubuntu下Topcoder配置

    先去下载一个http://community.topcoder.com/tc?module=Static&d1=applet&d2=partial-support 并且确保jdk可以使 ...

  8. topcoder srm 714 div1

    problem1 link 倒着想.每次添加一个右括号再添加一个左括号,直到还原.那么每次的右括号的选择范围为当前左括号后面的右括号减去后面已经使用的右括号. problem2 link 令$h(x) ...

  9. Virtual Judge —— Nim TopCoder - 11469

    Problem Statement 问题陈述 Alice and Bob are going to play a famous game called Nim. 爱丽丝和鲍勃将要玩一个著名的游戏叫尼姆 ...

  10. *[topcoder]JumpFurther

    http://community.topcoder.com/stat?c=problem_statement&pm=12300&rd=15699 题意:有一个无限长的阶梯,i从1到N, ...

最新文章

  1. 从web.xml谈谈SpringMVC集成spring的初始化流程及SpringBoot集成SpringMVC
  2. GIS实用小技巧(三)-CASS怎么添加图例?
  3. 接口返回的类型是html页面_1.10 PhalApi 2.x 接口文档
  4. raid-6磁盘阵列损坏导致数据丢失的恢复过程(图文教程)
  5. 微型计算机频繁死机的原因,电脑经常死机是什么原因|电脑经常死机的解决方法...
  6. 2021年中国高精地图产业研究分析
  7. python项目依赖库的导出和安装
  8. 11G新特性 -- ASM Fast Mirror Resync
  9. 【Git/Github学习笔记】ubuntu系统下使用git命令与windows下的差别
  10. Python书籍推荐:《Python编程之美:最佳实践指南》
  11. 什么是Java分布式?
  12. Linux 命令之 gzip -- 压缩和解压文件
  13. TB6612与电机编码器
  14. 深层和浅层卷积_浅层vs深层javascript
  15. 阿里云服务器怎么购买才更划算(新手教程)
  16. 如何无损把flac格式转换成mp3?将flac转mp3的技巧
  17. c语言求两个字符串的交集,用c语言求两个集合的交集,并集,差集
  18. vulnhub:THOTH TECH:1靶机
  19. word中四号字体对应于14pt,其他字号如下
  20. 单片机数码管显示热敏电阻实测温度,

热门文章

  1. 实现网页页面跳转的几种方法(meta标签、js实现、php实现)
  2. 跟我一起考PMP---项目整合管理
  3. 信息时代不被淘汰,获取成功需有的十种能力
  4. ThreadLocal . study
  5. 厌倦 VMware,试试更轻量级的虚拟机!
  6. 推荐一款日志切割神器!我常用~
  7. 刷了大量面试题后,我还是被面试官吊打了!
  8. 《Linux就该这么学》正式版电子书发布!
  9. 2019 年中国互联网企业 100 强揭晓,你的公司排在第几位呢?
  10. .net oa 用到那些技术_惨绝人寰!OA高达834分却只配收拒信?