ACWING80. Dice (para provar oferta de segurança)

Um dado de arremesso n vezes, o total de pontos obtidos para os s, s representa a gama de possíveis n ~ 6n.

Jogar um ponto, que pode ter vários métodos lançam, por exemplo, atirando 2, jogar três pontos, um total de [1,2], [2,1] lançar dois tipos de métodos.

O pedido de arremesso n vezes, n ~ 6n lance quantos pontos são método lançada.

Amostra 1
Entrada: n = 1

Saída: [1, 1, 1, 1, 1, 1]

Explicação: jogar 1, o número de pontos possíveis é 1-6, num total de seis tipos. Cada ponto tem apenas um tipo de método de arremesso. A saída de [1, 1, 1, 1, 1, 1].
Amostra 2
de entrada: n = 2

Saída: [1, 2, 3, 4, 5, 6, 5, 4, 3, 2, 1]

Explicação: jogando duas vezes o número de pontos que podem surgir como 2-12, de um total de 11 espécies. O número de pontos de cada método pode lançar são 1,2,3,4,5,6,5,4,3,2,1.

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

Pensando:
. É um problema da mochila completa, um número pode ser composto de 1 a 6 estes números Cada número pode ser usado várias vezes, perguntei quantos composição de espécies caminho.

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;
    }
};

Publicado 844 artigos originais · ganhou elogios 28 · vê 40000 +

Acho que você gosta

Origin blog.csdn.net/tomjobs/article/details/104972723
Recomendado
Clasificación