二维动态规划。和某一道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 blocked
if (!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];
}
}

  

[topcoder]AvoidRoads的更多相关文章

  1. [Topcoder]AvoidRoads(dp,hash)

    题目连接:https://community.topcoder.com/stat?c=problem_statement&pm=1889&rd=4709 题意:给一张n*m的地图,上面 ...

  2. TopCoder kawigiEdit插件配置

    kawigiEdit插件可以提高 TopCoder编译,提交效率,可以管理保存每次SRM的代码. kawigiEdit下载地址:http://code.google.com/p/kawigiedit/ ...

  3. 记第一次TopCoder, 练习SRM 583 div2 250

    今天第一次做topcoder,没有比赛,所以找的最新一期的SRM练习,做了第一道题. 题目大意是说 给一个数字字符串,任意交换两位,使数字变为最小,不能有前导0. 看到题目以后,先想到的找规律,发现要 ...

  4. TopCoder比赛总结表

    TopCoder                        250                              500                                 ...

  5. Topcoder几例C++字符串应用

    本文写于9月初,是利用Topcoder准备应聘时的机试环节临时补习的C++的一部分内容.签约之后,没有再进行练习,此文暂告一段落. 换句话说,就是本文太监了,一直做草稿看着别扭,删掉又觉得可惜,索性发 ...

  6. TopCoder

    在TopCoder下载好luncher,网址:https://www.topcoder.com/community/competitive%20programming/ 选择launch web ar ...

  7. TopCoder SRM 596 DIV 1 250

    body { font-family: Monospaced; font-size: 12pt } pre { font-family: Monospaced; font-size: 12pt } P ...

  8. 求拓扑排序的数量,例题 topcoder srm 654 div2 500

    周赛时遇到的一道比较有意思的题目: Problem Statement      There are N rooms in Maki's new house. The rooms are number ...

  9. TopCoder SRM 590

     第一次做TC,不太习惯,各种调试,只做了一题...... Problem Statement     Fox Ciel is going to play Gomoku with her friend ...

随机推荐

  1. setTimeout、clearTimeout、setInterval,clearInterval ——小小计时器

    先看下效果 话不多说上代码~ <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Typ ...

  2. JQuery的过滤选择器

    1.eg(num):查找索引num位置的元素,索引从0开始. 2.lt(num):查找索引小于num位置的元素,索引从0开始. 3.gt(num):查找索引大于num位置的元素,索引从0开始. 示例: ...

  3. Winform的窗体美化心酸路

    我想做一位狂热的程序猿粪子! 其实一直都很想做点什么,工作原因林林种种导致停止了前进的脚步. 有时会为自己的一个目标狂热,但经常发觉激情过后更多的总是为自己找借口! 最近感觉奔三将近.逐有感而发,不能 ...

  4. ios 数字禁止变成电话号码

    1.使用meta来限制页面不转换电话号码   <meta name="format-detection"content="telphone=no"/> ...

  5. phonegap + 推送 + 页面跳转 (ios)

    os如果没有页面跳转的需求的话就使用极光推送,如果有页面跳转如果用了极光推送就只有用oc去写,但是我不会oc,所以智能放弃极光选用ios自己的apns来实现 新建项目跟安卓创建项目差不多,新建完成后就 ...

  6. C++ 编写 CorelDRAW CPG 插件例子(1)—WelcomeScreen

    据我所知,这是国外论坛最早的一个例子,原贴在此:http://forum.oberonplace.com/showthread.php?t=1880&highlight=Plugins 贴上主 ...

  7. oracle通过透明网关连接mysql的配置

    之前配置过连接TD的,这一篇是介绍连接Mysql的配置很详细. http://blog.itpub.net/12679300/viewspace-1177222/

  8. Microsoft Expression Blend 4制作简单的按钮

    在博客园混了这么久了,第一次写博客.本人标准的理工男,文笔不敢说一般,只能用还学过语文.勉强达意而已.见笑!! 由于本人能有有限,错误之处在所难免,望大牛们批评指正,共同进步.^_^!!!!!!!!! ...

  9. 1078. Hashing (25)

    时间限制 100 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue The task of this problem is simp ...

  10. cadence 封装制作小结

    assembly :是装配层,就是元器件的实际大小,用来产生元器件的装配图.也可以使用此层进行布局:外框尺寸应该为元件除焊盘外的部分 该区域可比silkscreen小10mil,线宽不用设置,矩形即可 ...