[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 ...
随机推荐
- OOP—还原被遮掩的继承名称
1.public继承——using 声明式 class Base { private: int x; public: ; virtual void mf1(int) ; virtual void mf ...
- Redirect and POST in ASP.NET
http://www.codeproject.com/Articles/37539/Redirect-and-POST-in-ASP-NET
- JPA && Spring Data && Spring Data JPA
1.JPA Java Persistence API,用于对象持久化的一组API,JPA本身是一组规范,让开发者用同一种方式访问不同的ORM框架.其实也就是java实体对象和关系型数据库建立起映射关 ...
- [ Web Service ] [ SOAP ] [ JSON ] [ XML ] 格式轉換
JSON格式產生器_Demo JSON格式產生器_ObjGen - Live JSON Generator JSON格式整理_JSON Formatter & Validator Online ...
- php数组去重的函数代码
php中数组去重的小例子. 代码如下: <?php /** * 数组去重复的小函数 * by www.jbxue.com */ function assoc_unique($arr ...
- try catch finally 关闭流标准的写法
平常开发中,都知道要在finlly里关闭流,但是有时finlly里代码不当,会引起另外的异常. 以下是看struts2源代码看到的,随手记录下. 有两点注意: (1)判断流是否为空. (2)filly ...
- 《C和指针》 读书笔记 -- 第14章 预处理器
1.相邻字符串常量被自动链接为一个字符串:"my""name"="myname" 2.##把位于两边的符号连接成一个符号: #define ...
- FatMouse
时间限制:1 秒 内存限制:128 兆 特殊判题:否 提交:1431 解决:641 题目描述: FatMouse prepared M pounds of cat food, ready to t ...
- aaaa
http://www.host.com http://www.host.com http://sz.weixun.com/scenery/details-3.htm http://sz.weixun. ...
- nodejs read/write file
fs.readFile('c:\\tmp\\helloworld.txt','utf8',function(err,data){console.log(data);}) var token=fs.re ...