ACWING80。ダイス(安全プランを証明します)

投げダイスn回、Sについて得られた合計ポイント、Sは可能なn個〜6Nの範囲です。

ポイントを投げる、2種類の方法を投げる[2,1]、3点を投げる、例えば2を投げ、[1,2]の合計を複数スロー方法を有することができます。

投げ要求n回、n個の方法をスローされますどのように多くのポイント〜6Nスロー。

サンプル1つの
入力:N = 1

出力:[1、1、1、1、1、1]

説明:6種類、合計可能ポイントの数が1~6である、1を投げます。各点はスロー方法の一種のみを持っています。出力[1、1、1、1、1、1]。
サンプル2
入力:N = 2

出力:[1、2、3、4、5、6、5、4、3、2、1]

説明:2-12として生じ得る点の数倍、11種の合計を投げ。各方法の点の数がスローできる1,2,3,4,5,6,5,4,3,2,1です。

  所以输出[1, 2, 3, 4, 5, 6, 5, 4, 3, 2, 1]。

思考:
。数が1〜6これらの数字で構成することができ、完全なナップザック問題である各番号を複数回使用することができ、私はどのように多くの種組成の道を尋ねました。

class Solution {
public:
    vector<int> numberOfDice(int n) {
        vector<vector<int>>f(n + 1,vector<int>(6 * n + 1,0));
        
        f[0][0] = 1;
        for(int i = 1;i <= n;i++) {
            for(int j = 1;j <= i * 6;j++) {
                for(int k = 1;k <= 6;k++) {
                    if(j >= k) f[i][j] += f[i - 1][j - k];
                }
            }
        }
        
        vector<int>ans;
        for(int i = n;i <= n * 6;i++) {
            ans.push_back(f[n][i]);
        }
        
        return ans;
    }
};

公開された844元の記事 ウォン称賛28 ビュー40000 +

おすすめ

転載: blog.csdn.net/tomjobs/article/details/104972723