【HackerRank】Coin on the Table
题目链接:Coin on the Table
一开始想用DFS做的,做了好久都超时。
看了题解才明白要用动态规划。
设置一个三维数组dp,其中dp[i][j][k]表示在时间k到达(i,j)所需要做的最小改动,那么递推式如下:
图片来源:Editorial,其中当从周围的格子可以直接移动到(i,j)时,delta=0;否则,需要改变周围格子的方向符号,delta=1。
即k-1时刻在(i,.j)周围的四个格子,然后在k时刻移动到(i,j)。并且,看这四个格子中的方向符号是否直接可以完成这次移动,否则就改变这四个格子的方向符号。
代码如下:
import java.util.*; public class Solution { public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int m = in.nextInt();
int K = in.nextInt(); char[][] map= new char[n][m];
int[][][] dp = new int[n][m][K+1]; int star_x = 0;
int star_y = 0; for(int i = 0;i < n;i++){
String s = in.next();
if(s.contains("*"))
{
star_x = i;
star_y = s.indexOf("*");
}
map[i]=s.toCharArray();
} for(int k=0;k <= K;k++){
for(int i = 0;i < n;i++){
for(int j = 0;j < m;j++){
if(k==0)
dp[i][j][k] = (i==0&&j==0? 0:Integer.MAX_VALUE-1);
else{
dp[i][j][k] = CalcuMin(i,j,k,dp,map);
}
}
}
} int answer = Integer.MAX_VALUE-1;
for(int k = 0;k <= K;k++){
answer = Math.min(answer, dp[star_x][star_y][k]);
} System.out.println(answer==Integer.MAX_VALUE-1?-1:answer); } private static int CalcuMin(int i, int j, int k,int[][][] dp, char[][] map) {
// TODO Auto-generated method stub
int mini = Integer.MAX_VALUE-1;
int n = map.length;
int m = map[0].length; if(i-1>=0){
if(dp[i-1][j][k-1]+(map[i-1][j]=='D'?0:1) < mini )
mini = Math.min(mini,dp[i-1][j][k-1]+(map[i-1][j]=='D'?0:1));
} if(i+1<n){
if(dp[i+1][j][k-1]+(map[i+1][j]=='U'?0:1) < mini )
mini = Math.min(mini,dp[i+1][j][k-1]+(map[i+1][j]=='U'?0:1));
} if(j-1>=0){
if(dp[i][j-1][k-1]+(map[i][j-1]=='R'?0:1) < mini )
mini = Math.min(mini,dp[i][j-1][k-1]+(map[i][j-1]=='R'?0:1));
} if(j+1<m){
if(dp[i][j+1][k-1]+(map[i][j+1]=='L'?0:1) < mini )
mini = Math.min(mini,dp[i][j+1][k-1]+(map[i][j+1]=='L'?0:1));
}
return mini;
}
}
【HackerRank】Coin on the Table的更多相关文章
- 【HackerRank】How Many Substrings?
https://www.hackerrank.com/challenges/how-many-substrings/problem 题解 似乎是被毒瘤澜澜放弃做T3的一道题(因为ASDFZ有很多人做过 ...
- 【HackerRank】Running Time of Quicksort
题目链接:Running Time of Quicksort Challenge In practice, how much faster is Quicksort (in-place) than I ...
- 【2017-07-03】JS连续删除table中的选中的多行数据
deleteRow() 连续删除多行 应用:删除表格选中的一行或多行.html代码如下: <table > <tr> <td >复选框</td> < ...
- 【leetcode】1179. Reformat Department Table
题目如下: SQL Schema Table: Department +---------------+---------+ | Column Name | Type | +------------- ...
- 【hackerrank】Type of Triangle
题目如下: Write a query identifying the type of each record in the TRIANGLES table using its three side ...
- 【hackerrank】Weather Observation Station 18
题目如下: Consider and to be two points on a 2D plane. happens to equal the minimum value in Northern ...
- 【hackerrank】Placements
题目如下: You are given three tables: Students, Friends and Packages. Students contains two columns: ID ...
- 【转载】PostgreSQL分区表(Table Partitioning)应用
博客地址--点击
- 【XSY2759】coin DP 线性插值
题目描述 有\(n\)种面值不同的硬币,每种有无限个,且任意两个\((x,y)\)要么\(x\)是\(y\)的倍数,要么\(y\)是\(x\)的倍数. 你要取\(m\)元钱,问你有多少种不同的取法. ...
随机推荐
- linux无密登录
ssh-keygen -t rsa ssh-copy-id -i ~/.ssh/id_rsa.pub bigdata@cor2
- MacOS 自带文件编码格式转换工具
[命令功能]iconv 是Linux操作系统用于将文本编码格式从一种转外另外一种的工具命令.[使用方法] iconv [OPTION...] [-f ENCODING] [-t ENCODING] [ ...
- svn删除账户信息
当我们需要清理eclipse中记录的SVN账号信息时,按如下操作: eclipse中打开window------>preferences------->SVN页面,如下所示: 一般情况下, ...
- 如何查询当前手机的cpu架构,so库导入工程又出异常了?
执行adb命令: adb shell cat /proc/cpuinfo 对应文件夹 AArch64 == arm64-v8a ARMv7 == armeabi-v7a ............等 其 ...
- Linux Linux系统管理命令
df 检测文件系统的磁盘空间占用和空余情况 --用于检测文件系统的磁盘空间占用和空余情况,可以显示所有文件系统对接点和磁盘块的使用情况 --df [参数] --常用参数及含义 "-a&quo ...
- Style Lessons in Clarity and Grace (11th Edition)中文翻译
Joseph, Williams. "Style: Lessons in Clarity and Grace." Pearson Schweiz Ag (2014). 下载地址:h ...
- Xcode调试项目时取消弹出框提示授权
问题2: instruments wants permission to analyze other processes.'DTServiceHub'需要控制另外一个进程,以便继续调试,键入密码以允许 ...
- PHPStorm2017去掉参数提示 parameter name hints
JetBrains 的各种语言的 IDE 都灰常灰常好用, 个个都是神器, PHPStorm 作为PHP开发的神器也不必多说了 今天升级到 PHPStorm 2017.1 发现增加了好些新功能, 有个 ...
- ADODB
转自网友,看着挺全就转了,供大家学习研究. Recordset 对象的属性1.CursorType 属性AdOpenForwardOnly: 仅向前游标,默认值.除了只能在记录中向前滚动外,与静态游标 ...
- 基于Boost无锁队列实现的内存池