首页 > 其他分享 >剑指 Offer 60. n个骰子的点数

剑指 Offer 60. n个骰子的点数

时间:2023-09-03 21:36:17浏览次数:51  
标签:骰子 Offer int double 60 res 点数 dp


剑指 Offer 60. n个骰子的点数

动态规划:已知n-1个骰子的所有情况,再增加一个骰子,可推出n个骰子的所有情况。增加的一个骰子的点数只有1-6种可能,与n-1个骰子对应点数相乘,可得到n个骰子点数的一种情况,遍历所有情况即可。

class Solution {
    public double[] dicesProbability(int n) {
        double[][] dp = new double[n + 1][6 * n + 1];
        for(int i = 1; i <= 6; i++){
            dp[1][i] = 1.0 / 6;
        }

        for(int i = 2; i <= n; i++){  // 遍历骰子个数
            for(int j = i; j <= 6 * i; j++){  // 骰子个数确定时,遍历所有点数可能的情况
                for(int k = 1; k <= 6; k++){  // 新增的一个骰子点数有1-6种可能的情况
                    if(j - k > 0) dp[i][j] += dp[i - 1][j - k] / 6.0;
                }
            }
        }

        double[] res = new double[5 * n + 1];
        for(int i = 0; i < res.length; i++) res[i] = dp[n][i + n];
        return res;
    }
}


标签:骰子,Offer,int,double,60,res,点数,dp
From: https://blog.51cto.com/u_16208057/7343326

相关文章

  • 剑指 Offer 06. 从尾到头打印链表
    剑指Offer06.从尾到头打印链表方法一顺序添加,再翻转。classSolution{publicint[]reversePrint(ListNodehead){ListNodeh=head;List<Integer>res=newArrayList<>();while(h!=null){res.add(h.val);h=......
  • 剑指 Offer 03. 数组中重复的数字
    剑指Offer03.数组中重复的数字利用题目的限制条件:所有数字都在0~n-1的范围内通过交互让数字和下标一一对应,如果有多个数字对应同一个下标,那就找到了答案。classSolution{publicintfindRepeatNumber(int[]nums){intn=nums.length;inti=0;......
  • 剑指 Offer 62. 圆圈中最后剩下的数字(简单)
    题目:classSolution{public:intlastRemaining(intn,intm){intpos=0;for(inti=2;i<=n;i++){pos=(pos+m)%i;}returnpos;}};作者:想吃火锅的木易链接:https://leetcode.cn/problems/yuan-quan-zhong-z......
  • 剑指offer_20230803
    剑指Offer51.数组中的逆序对题目说明在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。解题思路1:暴力肯定是可行但是会超时的,就不用考虑了,但理论可行解题思路2:归并可以利用归并排序时的一个特性......
  • 调用360杀毒
    functionGet360SDPath:string;constAppsPath:string='\SOFTWARE\Microsoft\Windows\CurrentVersion\AppPaths';S60SD:string='360sd.exe';varARegistry:TRegistry;Applist:Tstringlist;i:integer;beginResult:='';A......
  • 剑指 Offer 57 - II. 和为s的连续正数序列(简单)
    题目:classSolution{public:vector<vector<int>>findContinuousSequence(inttarget){//本题使用滑动窗口(双指针)inti=1,j=1;//定义左右边界,一般是左闭右开intsum=0;//窗口内的和vector<vector<int>>result;whi......
  • P3604 美好的每一天题解
    传送门好题!首先说这道题的时间复杂度:\(O(26n\sqrtn)\)。因为转移是的常数是\(O(26)\)并非\(O(1)\),这启示我们,看数据范围,不要被O(1)给限制了,O(1)是一般情况,有些题不一般首先,回文串能出现的条件是所有的字符都出现偶数次\(or\)仅有一个字符出现奇数次,所以我们并不关心每个......
  • 剑指 Offer 39. 数组中出现次数超过一半的数字(简单)
    题目:classSolution{public:intmajorityElement(vector<int>&nums){unordered_map<int,int>map;intresult;for(inti=0;i<nums.size();i++){map[nums[i]]++;}for(inti=0;i<n......
  • 【9月摸鱼计划】x2240处理器与x4605e处理器比较
    这两款处理器适合不同的场景和需求。如果需要高性能的服务器处理器来运行复杂的数据任务,则X4605E处理器是更好的选择。如果需要一款低功耗的家庭或办公用途台式机处理器,则X2240更适合。X4605E处理器和X2240处理器是来自英特尔(Intel)和AMD公司的两款不同类型的处理器,它们都具有不同......
  • Leetcode 剑指 Offer 58 - II. 左旋转字符串(Zuo xuan zhuan zi fu chuan lcof)
    题目链接字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。示例1:输入:s="abcdefg",k=2输出:"cdefgab"示例2:输入:s=......