Programación Dinámica: Clon de la Sombra de Naruto

En el mundo de Naruto, ser impredecible para el enemigo es muy importante.

Un movimiento que posee nuestro protagonista Uzumaki Naruto, la técnica de clonación de sombras múltiples, es un buen ejemplo de esto.

El clon de sombra es creado por la energía de chakra del cuerpo de Naruto, cuanto más chakra se usa, más fuerte se crea el clon de sombra.

De acuerdo con las diferentes situaciones de combate, Naruto puede optar por crear clones de sombra de varios puntos fuertes, algunos se usan para ataques de fintas y otros se usan para golpes fatales.

Así que aquí viene la pregunta, suponiendo que la energía del chakra de Naruto sea M y que el número de sus clones de sombra sea N como máximo , ¿cuántos métodos de distribución diferentes existen para crear clones de sombra?

Nota :

  1. Los clones de sombra pueden distribuir 0 energía.

  1. El esquema de asignación no considera el orden, por ejemplo: M=7, N=3, entonces (2,2,3) y (2,3,2) se consideran como el mismo esquema.

formato de entrada

La primera línea es el número t de datos de prueba .

Cada una de las siguientes líneas contiene dos números enteros M y N , separados por espacios.

formato de salida

Para cada conjunto de datos de entrada M y N , use una línea para generar el número de métodos asignados.

rango de datos

0≤t≤20 ,

1≤M,N≤10

Muestra de entrada:

1
7 3

Salida de muestra:

8

Idea : i representa la suma de los números seleccionados, j representa la cantidad de números seleccionados, dp[i][j] representa el esquema de que la suma es i, y se divide en la suma de j números

#include<iostream>
using namespace std;
#define N 11
int dp[N][N];
int main()
{
    int t;
    dp[0][0] = 1;//初始状态是1,即不选任何数也是一种方案
    cin >> t;
    while (t--)
    {
        int m, n;
        cin >> m >> n;
        for (int i = 0; i <= m; i++)
        {
            for (int j = 1; j <= n; j++)
            {
                dp[i][j] = dp[i][j - 1];
                if (i >= j) dp[i][j] = dp[i][j - 1] + dp[i - j][j];
            }
        }
        cout << dp[m][n] << endl;
    }
    return 0;
}

Supongo que te gusta

Origin blog.csdn.net/m0_73648729/article/details/129247822
Recomendado
Clasificación