【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\)元钱,问你有多少种不同的取法. ...
随机推荐
- CI的意思
Continuous integration (CI) is the practice, in software engineering, of merging all developer worki ...
- 扒一扒asp.net core mvc控制器的寻找流程
不太会排版,大家将就看吧. asp.net core mvc和asp.net mvc中都有一个比较有意思的而又被大家容易忽略的功能,控制器可以写在非Web程序集中,比如Web程序集:"MyW ...
- hdu 5374 Tetris(模拟)
pid=5374">题目链接:hdu 5374 Tetris 模拟.每次进行操作时推断操作是否合法,合法才运行,否则跳过.每次一个token落地,推断一下是否有消除整行. #inclu ...
- (转载)Unity3D研究院之使用 C#合成解析XML与JSON(四十一)
XML与JSON在开发中非常重要, 其实核心就是处理字符串.一个是XML的字符串一个是JSON的字符串,尤其是在处理网络请求的时候,肯定是要用的.另外现在JSON非常的流行,我写了一个简单的例子融合了 ...
- Unity3D学习笔记——Android重力感应控制小球
一:准备资源 两张贴图:地图和小球贴图. 二:导入资源 在Assets下建立resources文件夹,然后将贴图导入. 三:建立场景游戏对象 1.建立灯光: 2.创建一个相机,配置默认. 3.建立一个 ...
- poj 3686(拆点+最小权匹配)
题目链接:http://poj.org/problem?id=3686 思路:显然工件为X集,机器为Y集合.由于每个机器一次只能加工一个部件,因此我们可以将一台机器拆成N个点,至于部件与机器之间连多大 ...
- python3----字符串格式化(format)
用法: 它通过{}和:来代替传统%方式 1.使用位置参数 要点:从以下例子可以看出位置参数不受顺序约束,且可以为{},只要format里有相对应的参数值即可,参数索引从0开,传入位置参数列表可用*列表 ...
- NDK,在JNI层使用AssetManager读取文件
NDK,二进制文件数据读取,在JNI层,通过AAssetManager读取asset内部的资源: 需要头文件的支持 #include <android/asset_manager_jni.h&g ...
- spring无法启动常见原因及排查方法
这里总结的问题,通常啥错误也不报,需要自个debug排查,当然每个人遇到的问题可能是不同的,这里仅仅是我个人帮同事解决问题后的一些总结,可能网上的小伙伴可能也遇到,姑且简单记录一下: 1. mybat ...
- JFrame上添加、删除Jpanel后动态显示界面问题
JFrame中动态添加或者删除JPanel后总是不正确显示需要的界面问题: 1.删除panel后还是显示之前的界面,新删除的panel在界面上并没有被删除: 2.删除panel1后添加新的panel2 ...