剑指 Offer 60. n个骰子的点数 + 动态规划 + 空间优化
剑指 Offer 60. n个骰子的点数
Offer_60
题目详情

题解分析

package com.walegarrett.offer;
/**
* @Author WaleGarrett
* @Date 2021/2/12 18:29
*/
/**
* 题目描述:把n个骰子扔在地上,所有骰子朝上一面的点数之和为s。输入n,打印出s的所有可能的值出现的概率。
* 你需要用一个浮点数数组返回答案,其中第 i 个元素代表这 n 个骰子所能掷出的点数集合中第 i 小的那个的概率。
*/
import java.util.Arrays;
/**
* 动态规划:dp[i][j]表示掷n个骰子后,点数总和为j出现的次数
*/
public class Offer_60 {
public double[] dicesProbability(int n) {
int[][] dp = new int[n+1][70];
for(int i=1; i<=6; i++){
dp[1][i] = 1;
}
for(int i=2; i<=n; i++){
for(int j=i; j<=6*i; j++){
for(int k=1; k<=6 && j-k>0; k++)
dp[i][j] += dp[i-1][j-k];
}
}
double allP = Math.pow(6,n);
double[] result = new double[6*n-n+1];
for(int i=n; i<=6*n; i++){
result[i-n] = dp[n][i] * 1.0 / allP;
}
return result;
}
}
空间优化
/**
* 动态规划:空间优化
*/
class Offer_60_1 {
public double[] dicesProbability(int n) {
int[] dp = new int[70];
Arrays.fill(dp,0);
for(int i=1; i<=6; i++){
dp[i] = 1;
}
for(int i=2; i<=n; i++){
for(int j=6*i; j>=i; j--){
dp[j] = 0;//很重要
for(int k=1; k<=6 && j-k>=i-1; k++)
dp[j] += dp[j-k];
}
}
double allP = Math.pow(6,n);
double[] result = new double[6*n-n+1];
for(int i=n; i<=6*n; i++){
result[i-n] = dp[i] * 1.0 / allP;
}
return result;
}
}
题解参考:【n个骰子的点数】:详解动态规划及其优化方式
剑指 Offer 60. n个骰子的点数 + 动态规划 + 空间优化的更多相关文章
- 剑指 Offer 60. n个骰子的点数
剑指 Offer 60. n个骰子的点数 把n个骰子扔在地上,所有骰子朝上一面的点数之和为s.输入n,打印出s的所有可能的值出现的概率. 你需要用一个浮点数数组返回答案,其中第 i 个元素代表这 n ...
- 【Java】 剑指offer(60) n个骰子的点数
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 把n个骰子扔在地上,所有骰子朝上一面的点数之和为s.输入n,打 ...
- 【剑指offer】n个骰子的点数,C++实现
# 题目 # 思路 # 代码
- 剑指offer-面试题60-n个骰子的点数-动态规划
/* 题目: 计算n个骰子,出现和s的概率. */ #include<iostream> #include<cstdlib> #include<stack> #in ...
- 剑指 Offer 46. 把数字翻译成字符串 + 动态规划
剑指 Offer 46. 把数字翻译成字符串 Offer_46 题目描述 题解分析 本题的解题思路是使用动态规划,首先得出递推公式如下 dp[i] = dp[i-1]+dp[i-2](如果s[i-1] ...
- 剑指Offer 60. 把二叉树打印成多行 (二叉树)
题目描述 从上到下按层打印二叉树,同一层结点从左至右输出.每一层输出一行. 题目地址 https://www.nowcoder.com/practice/445c44d982d04483b04a54f ...
- [剑指Offer] 60.把二叉树打印成多行
题目描述 从上到下按层打印二叉树,同一层结点从左至右输出.每一层输出一行. [思路]使用队列实现二叉树的层次遍历. /* struct TreeNode { int val; struct TreeN ...
- 剑指offer——60二叉树的深度
题目描述 输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度. 题解: 简单的深度遍历即可. class Solution ...
- LeetCode:“剑指 Offer”
LeetCode:"剑指 Offer" 刷题小菜鸡,花了几天时间做了一遍 LeetCode 上给出的 "剑指 Offer" 在此做一下记录 LeetCode主页 ...
随机推荐
- Atcoder(134)E - Sequence Decomposing
E - Sequence Decomposing Time Limit: 2 sec / Memory Limit: 1024 MB Score : 500500 points Problem Sta ...
- hdu4325 Flowers
Problem Description As is known to all, the blooming time and duration varies between different kind ...
- hdu5459 Jesus Is Here
Problem Description I've sent Fang Fang around 201314 text messages in almost 5 years. Why can't she ...
- 洛谷 P6225 [eJOI2019]异或橙子 (树状数组)
题意:有\(n\)个数,起始值均为\(0\),进行\(q\)次操作,每次输入三个数,如果第一个数为\(1\),则将第\(i\)个数修改为\(j\),如果为\(2\),则求区间\([l,r]\)内的所有 ...
- k8s-2-集成apollo配置中心
主题: 在k8s中集成Apollo配置中心 架构图 一.配置中心概述 配置的几种方式 本课讲得是基于配置中心数据库实现 配置管理的现状 常见的配置中心 主讲:k8s configmap,apollo ...
- k8s-0-集群
Docker回顾 docker容器封装应用程序好处 内核在3.8以上,才能完整使用docker隔离功能(所有centos6不推荐用) Docker容器化封装应用程序缺点 容器编排工具有哪些 一: K8 ...
- 基于用户的协同过滤的电影推荐算法(tensorflow)
数据集: https://grouplens.org/datasets/movielens/ ml-latest-small 协同过滤算法理论基础 https://blog.csdn.net/u012 ...
- Linux的进程权限控制
Linux系统的安全性得益于其进程权限和文件权限的控制机制.今天抽空梳理下Linux下的进程权限控制相关的文件权限涉及一点.首先明确四个名词:真实用户ID(real ID).有效用户ID(effect ...
- TypeScript & Canvas 实现可视化白板
TypeScript & Canvas 实现可视化白板 https://excalidraw.com/ https://github.com/excalidraw/excalidraw ref ...
- online QRcode generator , QRcode=== (Quick Response Code) , 二维条码,二维码,彩色二维码,图片二维码,
online QRcode generator , QRcode=== (Quick Response Code) , 二维条码,二维码,彩色二维码,图片二维码, 1 http://cli.i ...