1. 程式人生 > >lintcode 20. 骰子求和 動態規劃

lintcode 20. 骰子求和 動態規劃

扔 n 個骰子,向上面的數字之和為 S。給定 Given n,請列出所有可能的 S 值及其相應的概率。

 注意事項

You do not care about the accuracy of the result, we will help you to output results.

您在真實的面試中是否遇到過這個題?  Yes 樣例

給定 n = 1,返回[ [1, 0.17], [2, 0.17], [3, 0.17], [4, 0.17], [5, 0.17], [6, 0.17]]


class Solution:
    # @param {int} n an integer
    # @return {tuple[]} a list of tuple(sum, probability)
    def dicesSum(self, n):
        # Write your code here
        total= 6**n
        result=[]
        f=[0]*(n*6+1)
        g=f[:]
        for i in range(1,7):
            f[i]=1
        for k in range(2,n+1):
            for i in range(1,6*k+1):
                for j in range(1,7):
                    if i-j > 0:
                        g[i]+=f[i-j]
                    else:
                        break
            f=g[:]
            g=[0]*(n*6+1)
        print f
        for i in range(1*n,6*n+1):
            arr=[i]
            arr.append(float(f[i])/float(total))
            result.append(arr)
        return result


相關推薦

lintcode 20. 求和 動態規劃

扔 n 個骰子,向上面的數字之和為 S。給定 Given n,請列出所有可能的 S 值及其相應的概率。  注意事項 You do not care about the accuracy of the result, we will help you to out

LintCode Python 困難級題目 20.求和 動態規劃

題目描述: 扔 n 個骰子,向上面的數字之和為 S。給定 Given n,請列出所有可能的 S 值及其相應的概率。  注意事項 You do not care about the accuracy of the result, we will help you to output results.

Lintcode 20 求和

扔 n 個骰子,向上面的數字之和為 S。給定 Given n,請列出所有可能的 S 值及其相應的概率。樣例給定 n = 1,返回 [ [1, 0.17], [2, 0.17], [3, 0.17], [4, 0.17], [5, 0.17], [6, 0.17]]。思路:扔n

lintcode 求和

/* 今天被問到了一道lintcode上的題目,然而想了好久才想明白,看來在STL處折騰得太久,當初看《挑戰》時,粗淺地學的一點點動態規劃,已經忘得所剩無幾了... 這幾天開始上課了,寫a

C++求解漢字字符串的最長公共序列 動態規劃

esp style mes else if c++ char 那種 size 公共子序列 近期,我在網上看了一些動態規劃求字符串最長公共子序列的代碼。可是無一例外都是處理英文字符串,當處理漢字字符串時。常常會出現亂碼或者不對的情況。 我對代碼進行了改動。使用wc

甲級PAT 1046 Shortest Distance (20 分)(動態規劃

1046 Shortest Distance (20 分) The task is really simple: given N exits on a highway which forms a simple cycle, you are supposed

求和 c++

#include<iostream> #include<iomanip> #define MAXLENGTH 100 using namespace std; void dict(int* result, int num, int sum) { i

P2679 [NOIP2015]串-動態規劃,字串

有兩個僅包含小寫英文字母的字串 AA 和 BB。 現在要從字串 A 中取出 k 個互不重疊的非空子串,然後把這 k 個子串按照其在字串 A 中出現的順序依次連線起來得到一個新的字串。請問有多少種方案

300.Longest Increasing Subsequence 最長遞增序列 動態規劃

題目 給定一個未排序的整數陣列,找到最長遞增子序列的長度。 思路 動態規劃,使用一個數組dp記錄原陣列每一個位置的數字和到這個位置為止的最長子序列長度,dp陣列元素是元組——(a:當前位置最長子序列長度,b:當前位置數字),遍歷陣列,每遍歷到一個數字i,找到

leetcode 718. Maximum Length of Repeated Subarray 最長公共串 + 動態規劃DP

Given two integer arrays A and B, return the maximum length of an subarray that appears in both arrays. Example 1: Input: A: [1,

最大連續序列——動態規劃經典問題

前幾天在牛客網上看到一道關於動態規劃的題目,完全不知如何著手。所以就去學習了一下動態規劃,參考網上的解析,跌跌撞撞把一道杭電上的最大連續子序列敲了出來。 題目來源: http://acm.hdu.edu.cn/showproblem.php?pid=1231 給定K個整數的

最長遞減序列--動態規劃

例如:有一個序列,例如 9 8 2 1 7 5 3 4 3 2 1.      求出最長的遞減子序列。如本例的結果就是:9 8 7 5 4 3 2 1。 分析:         可採用動態規劃的思想進行解答,時間複雜度為O(n^2).        設原陣列為a[1

夕拾演算法進階篇:16)最長迴文串(動態規劃DP)

給出一個字串S,求S的最長迴文子串的長度。 樣例:字串“PATZJUJZTACCBCC”的迴文子串為“ATZJUJZTA”,長度為9。 如果使用暴力解法,列舉子串的兩個端點i和j,時間複雜度需要O(n^2)。判斷子串是否為迴文需要O(n),總體時間複雜度為O(n^3),使用

POJ 1458/HDU 1159 最長公共序列 (動態規劃)

題目連結:poj && hdu 程式碼 #include <iostream> #include <cstdio> #include <algo

最長對稱串(動態規劃解法)

5-12 最長對稱子串   (25分) 對給定的字串,本題要求你輸出最長對稱子串的長度。例如,給定Is PAT&TAP symmetric?,最長對稱子串為s PAT&TAP s,於是你應該輸出11。 輸入格式: 輸入在一行中給出長度不超過1000

BZOJ 2423: [HAOI2010]最長公共序列|動態規劃

第一問直接dp求 if s1[i]==s2[j] then f[i][j]=f[i-1][j-1]+1 else f[i][j]=max(f[i][j-1],f[i-1][j]) 用g[i][j]來表

最長公共串與序列-動態規劃(Python)

最長公共子串(The Longest Common Substring)        LCS問題就是求兩個字串最長公共子串的問題。解法就是用一個矩陣來記錄兩個字串中所有位置的兩個字元之間的匹配情況,若是匹配則為左上方的值加1,否則為0。然後求出對角線最長的1的序列,其對應

011-最長公共序列-動態規劃-《演算法設計技巧與分析》M.H.A學習筆記

給出兩個長度分別為n和m的字串A和B,確定A和B中最長公共子序列的長度。 樸素演算法:列舉A中所有的子序列2n個,並逐個判斷其是否在B中(Θ(m)耗費)。時間複雜度為Θ(m2n)。 利用動態規劃可

最長有序序列—動態規劃演算法

任何思想方法都有一定的侷限性,超出了特定條件,它就失去了作用。同樣,動態規劃也並不是萬能的。適用動態規劃的問題必須滿足最優化原理和無後效性。    1.最優化原理(最優子結構性質) 最優化原理可這樣闡述:一個最優化策略具有這樣的性質,不論過去狀態和決策如何,對前面的決策所

Leetcode300——最長上升序列(動態規劃)

題目描述:給定一個無序的整數陣列num,找到其中最長上升子序列的長度。 示例: 輸入:[10,9,2,5,3,7,101,18] 輸出:4 解釋:最長的上升子序列是[2,3,7,101],它的長度是4 典型的動態規劃題目,定義一個數組dp,其中dp[i]