【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\)元钱,问你有多少种不同的取法. ...
随机推荐
- Power Network - poj 1459 (最大流 Edmonds-Karp算法)
Time Limit: 2000MS Memory Limit: 32768K Total Submissions: 24788 Accepted: 12922 Description A ...
- 最新win7系统安全稳定版
最新win7系统32位安全稳定版 V2016年2月,具有更安全.更稳定.更人性化等特点.集成最常用的装机软件,集成最全面的硬件驱动,精心挑选的系统维护工具,加上萝卜独有人性化的设计.是电脑城.个人.公 ...
- asp.net c#采集需要登录页面的实现原理及代码
当我们采集页面的时候,如果被采集的网站需要登录才能采集,原理搞清楚了,就好办了,我们所要做的仅仅是在采集的时候(或者说HttpWebRequest提交数据的时候),将Cookie信息放入Http请求头 ...
- zmq重点
The zmq_msg_send(3) method does not actually send the message to the socket connection(s). It queues ...
- mysql 年龄计算(根据生日)
生日(DATE) 计算方法1: ))) 计算方法2: year( from_days( datediff( now( ), birthdate))) now() 当前时间,精确到秒 datediff( ...
- windows 下XAMPP 使用Nginx替代apache作为服务器
说实话, 在windows下使用Nginx 着实有点不太方便, 但因项目需求, 又不想换系统(虽然可以搞个虚拟机玩), 只能用Nginx了 好了, 不多说了. 开始... 首先我用的是xampp包(A ...
- 使用json遇到的问题
JSON JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式.它基于 ECMAScript (w3c制定的js规范)的一个子集,采用完全独立 ...
- ios数据存储方式FMDB
本文转载至 http://blog.csdn.net/chen505358119/article/details/9289489 分类: ios2013-07-10 14:05 2471人阅读 评论( ...
- 【BZOJ4199】[Noi2015]品酒大会 后缀数组+并查集
[BZOJ4199][Noi2015]品酒大会 题面:http://www.lydsy.com/JudgeOnline/wttl/thread.php?tid=2144 题解:听说能用SAM?SA默默 ...
- oracle中如何判断某个日期是星期几
SELECT to_char(to_date('2011-03-13','YYYY-MM-DD'),'d') FROM DUAL 其中 红色部分为传入日期 to_char的其他用法 Select to ...