[topcoder]AvoidRoads
二维动态规划。和某一道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的更多相关文章
- [Topcoder]AvoidRoads(dp,hash)
题目连接:https://community.topcoder.com/stat?c=problem_statement&pm=1889&rd=4709 题意:给一张n*m的地图,上面 ...
- TopCoder kawigiEdit插件配置
kawigiEdit插件可以提高 TopCoder编译,提交效率,可以管理保存每次SRM的代码. kawigiEdit下载地址:http://code.google.com/p/kawigiedit/ ...
- 记第一次TopCoder, 练习SRM 583 div2 250
今天第一次做topcoder,没有比赛,所以找的最新一期的SRM练习,做了第一道题. 题目大意是说 给一个数字字符串,任意交换两位,使数字变为最小,不能有前导0. 看到题目以后,先想到的找规律,发现要 ...
- TopCoder比赛总结表
TopCoder 250 500 ...
- Topcoder几例C++字符串应用
本文写于9月初,是利用Topcoder准备应聘时的机试环节临时补习的C++的一部分内容.签约之后,没有再进行练习,此文暂告一段落. 换句话说,就是本文太监了,一直做草稿看着别扭,删掉又觉得可惜,索性发 ...
- TopCoder
在TopCoder下载好luncher,网址:https://www.topcoder.com/community/competitive%20programming/ 选择launch web ar ...
- TopCoder SRM 596 DIV 1 250
body { font-family: Monospaced; font-size: 12pt } pre { font-family: Monospaced; font-size: 12pt } P ...
- 求拓扑排序的数量,例题 topcoder srm 654 div2 500
周赛时遇到的一道比较有意思的题目: Problem Statement There are N rooms in Maki's new house. The rooms are number ...
- TopCoder SRM 590
第一次做TC,不太习惯,各种调试,只做了一题...... Problem Statement Fox Ciel is going to play Gomoku with her friend ...
随机推荐
- javascript笔记—— call 简单理解
call 方法 请参阅 应用于:Function 对象 要求 版本 5.5 调用一个对象的一个方法,以另一个对象替换当前对象. call([thisObj[,arg1[, arg2[, [,.argN ...
- @override
目录 用处 作用 注意 用处: 继承抽象类,必须实现抽象方法,方法上要加@override 实现接口时,必须实现接口里定义的方法,方法上要加@override 作用: 可以检查方法 ...
- centos mail 不能发邮件
http://alfred-long.iteye.com/blog/1836488 (参考) 最近centos 6.4突然不能发邮件了, 直接用 mail命令测试也不收不到邮件 以下参考大侠们的经验后 ...
- color 颜色代码 android res/values/colors.xml
<?xml version="1.0" encoding="utf-8"?> <resources> <color name=&q ...
- AJAX异步请求原理和过程
AJAX 指异步 JavaScript 及 XML(Asynchronous JavaScript And XML),它不是一种新的编程语言,而是一种使用现有标准的新方法. AJAX 基于 JavaS ...
- Hibernate 老外的完整教程
http://viralpatel.net/blogs/hibernate-many-to-many-annotation-mapping-tutorial/
- Spark Streaming揭秘 Day3-运行基石(JobScheduler)大揭秘
Spark Streaming揭秘 Day3 运行基石(JobScheduler)大揭秘 引子 作为一个非常强大框架,Spark Streaming兼具了流处理和批处理的特点.还记得第一天的谜团么,众 ...
- PL/SQL中如何执行DDL、SCL?
PL/SQL程序中不能直接执行DDL语句.为什么? 假设我们在pl/sql程序中有这样的一条DDL语句—— drop table emp:在第一次解析pl/sql中的“drop table emp;” ...
- angular service/directive
<html class=" js cssanimations csstransitions" ng-app="phonecatApp" > < ...
- C# - dynamic 类型
C#4引入dynamic关键字,定义变量时,可以不初始化它的值. dynamic类型仅在编译期间存在,在运行期间会被System.Object类型替代. dynamic myDynamicVar; m ...