2018-07-14 09:57:59

问题描述:

问题求解:

本题本质上是个挺模板的题目。本质是一个求最后每个落点的数目,用总的数目来除有所可能生成的可能性。这种计数的问题可以使用动态规划来进行解决。

在本题中有两个注意点:

1)可以使用两个数组滚动使用来实现重复利用,这里我的实现使用了一个trick就是结合奇偶性来完成数组滚动;

2)dp数组需要定义成double类型的,如果定义成int类型的,在后期会出现溢出的问题。

    public double knightProbability(int N, int K, int r, int c) {
double[][][] dp = new double[2][N][N];
int[][] dir = new int[][]{
{-1, -2},
{-2, -1},
{1, -2},
{2, -1},
{-1, 2},
{-2, 1},
{1, 2},
{2, 1},
};
dp[0][r][c] = 1;
for (int k = 0; k < K; k++) {
fill2D(dp, (k + 1) & 1, N);
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
for (int m = 0; m < 8; m++) {
int u = i + dir[m][0];
int v = j + dir[m][1];
if (u < 0 || u >= N || v < 0 || v >= N) continue;
dp[(k + 1) & 1][u][v] += dp[k & 1][i][j];
}
}
}
}
double total = 0;
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
total += dp[K & 1][i][j];
}
}
return total / Math.pow(8, K);
} private void fill2D(double[][][] array, int layer, int n) {
for (int i = 0; i < n; i++) Arrays.fill(array[layer][i], 0);
}

Follow up:

问题描述:

问题求解:

如出一辙。

    public int findPaths(int m, int n, int N, int i, int j) {
int[][] dp = new int[m][n];
dp[i][j] = 1;
int res = 0;
int mod = (int)Math.pow(10, 9) + 7;
int[][] dirs = new int[][]{{-1, 0}, {1, 0}, {0, -1}, {0, 1}};
for (int step = 0; step < N; step++) {
int[][] cur = new int[m][n];
for (int pi = 0; pi < m; pi++) {
for (int pj = 0; pj < n; pj++) {
for (int[] dir : dirs) {
int x = pi + dir[0];
int y = pj + dir[1];
if (x < 0 || x >= m || y < 0 || y >= n) {
res = (res + dp[pi][pj]) % mod;
}
else cur[x][y] = (cur[x][y] + dp[pi][pj]) % mod;
}
}
}
dp = cur;
}
return res;
}

最新文章

  1. .Net 4.5可执行程序OutOfMemory
  2. MyEclipse无法删除项目下的文件
  3. Ionic2 rc2 Events 跨界面调用的使用方法及问题解决
  4. Windows 终端服务器授权 激活
  5. java设计模式(六)--观察者模式
  6. Android 异步消息处理机制解析
  7. C# 如何执行bat文件 传参数
  8. Android——进度条ProgressBar
  9. Wpf 简单制作自己的窗体样式(2)
  10. 线程池 异步I/O线程 &lt;第三篇&gt;
  11. LNMP下基于端口的虚拟主机配置
  12. (转)eclipse自动补全的设置
  13. CoreAnimation 寄宿图
  14. 【RabbitMQ系列】队列、绑定、交换器
  15. Android原生嵌入React Native
  16. python基础3 字符串常用方法
  17. 题解-bzoj3901 棋盘游戏
  18. Python -- tabulate 模块,
  19. springmvc异步上传图片并回调页面函数插入图片url代码示例
  20. scrapy爬取网址,进而爬取详情页问题

热门文章

  1. C++扬帆远航——6(三色球)
  2. PDF 相关操作
  3. ORACLE数据库实现主键自增
  4. python版md-to-html编辑器
  5. 2020年,如何成为一名 iOS 开发高手!
  6. Hadoop fs 基础命令
  7. MySQL/InnoDB中的事务隔离级别
  8. Python中使用os模块执行远程命令
  9. elementui 在原生方法参数里,添加参数
  10. pyppeteer使用时常见的bug及基本使用(转)