题目链接: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的更多相关文章

  1. 【HackerRank】How Many Substrings?

    https://www.hackerrank.com/challenges/how-many-substrings/problem 题解 似乎是被毒瘤澜澜放弃做T3的一道题(因为ASDFZ有很多人做过 ...

  2. 【HackerRank】Running Time of Quicksort

    题目链接:Running Time of Quicksort Challenge In practice, how much faster is Quicksort (in-place) than I ...

  3. 【2017-07-03】JS连续删除table中的选中的多行数据

    deleteRow() 连续删除多行 应用:删除表格选中的一行或多行.html代码如下: <table > <tr> <td >复选框</td> < ...

  4. 【leetcode】1179. Reformat Department Table

    题目如下: SQL Schema Table: Department +---------------+---------+ | Column Name | Type | +------------- ...

  5. 【hackerrank】Type of Triangle

    题目如下: Write a query identifying the type of each record in the TRIANGLES table using its three side ...

  6. 【hackerrank】Weather Observation Station 18

    题目如下: Consider  and  to be two points on a 2D plane. happens to equal the minimum value in Northern ...

  7. 【hackerrank】Placements

    题目如下: You are given three tables: Students, Friends and Packages. Students contains two columns: ID  ...

  8. 【转载】PostgreSQL分区表(Table Partitioning)应用

    博客地址--点击

  9. 【XSY2759】coin DP 线性插值

    题目描述 有\(n\)种面值不同的硬币,每种有无限个,且任意两个\((x,y)\)要么\(x\)是\(y\)的倍数,要么\(y\)是\(x\)的倍数. 你要取\(m\)元钱,问你有多少种不同的取法. ...

随机推荐

  1. 【Mac + Python3.6 + ATX基于facebook-wda】之IOS自动化(一):WebDriverAgent安装

    此篇介绍如何安装WebDriverAgent,下一篇介绍facebook-wda库的安装使用以及自动化脚本的开发. 前言: 对于iOS的应用的测试,如果不需要用到图像识别,推荐使用这个项目facebo ...

  2. Spring MVC生成PDF文件

    以下示例演示如何使用Spring Web MVC框架生成PDF格式的文件.首先使用Eclipse IDE,并按照以下步骤使用Spring Web Framework开发基于动态表单的Web应用程序: ...

  3. wpf数据绑定更新通知

    类似于这样子的;大致的意思是:一个代码变量,通过改变变量的值,绑定这个变量的这个圆颜色也在变化 就是一种心跳效果 在网上数据触发的感觉不多,废了不少时间,这里做个总结 1:通知 class Notif ...

  4. day3笔记

    一.内容回顾 1.break:停止当前循环,后面的程序不会运行,跳出循环. 跳出while循环:1,改变条件.2.break continue:结束本次循环,继续下一次循环. 2.格式化输出:%%可以 ...

  5. cocos2D 虚拟摇杆Joystick功能实现

        @implementation InputLayer        - (id)init    {        if(self = [super init])        {        ...

  6. 部署vuejs dist文件,通过node.js编译

    前期准备: 1. Linux环境,安装配置node.js ① 下载地址:http://nodejs.cn/download/  ,下载linux 64位 ② 已编译好的压缩包,解压到指定目录 cd / ...

  7. GridView实现编辑删除

    前台界面: <asp:GridView ID=" ForeColor="#333333" AutoGenerateColumns=" OnRowCance ...

  8. 【Python之路】第十六篇--Web框架之Tornado

    概述 Tornado 是 FriendFeed 使用的可扩展的非阻塞式 web 服务器及其相关工具的开源版本.这个 Web 框架看起来有些像web.py 或者 Google 的 webapp,不过为了 ...

  9. TFS二次开发-基线文件管理器(4)-标签的创建

    上一节已经完成了源码文件的读取,如果要将已经选择的文件保存为一个标签(Lable).在VS我们只能对一个目录做标签,非常的不方便.如果用下面的方法,将选择的文件路径保存为一个List在打标签,就非常的 ...

  10. PHP heredoc 用法

    php 中的 heredoc技术是php用来引用字符串的一种方式.在phpwind中巧妙的运用了这个技术,实现了逻辑代码和界面设计的分离. 语法: 1. 使用操作符  “<<<” 2 ...