NARUTOの世界では、敵に対して予測できないことが非常に重要です。
主人公のうずまきナルトが持つ技、多重影分身術はその好例です。
シャドウクローンはナルトの体のチャクラエネルギーによって作成され、チャクラが使用されるほど、作成されるシャドウクローンはより強力になります。
さまざまな戦闘状況に応じて、ナルトはさまざまな強さの影のクローンを作成することを選択できます。一部はフェイント攻撃に使用され、一部は致命的な打撃に使用されます。
ここで疑問が生じます。ナルトのチャクラ エネルギーがMで、彼のシャドウ クローンの数が最大Nであると仮定すると、シャドウ クローンを作成する際の分散方法は何通りありますか?
注:
シャドウ クローンが配布できるエネルギーは 0 です。
割り当てスキームでは順序は考慮されません。たとえば、M=7、N=3 の場合、(2,2,3) と (2,3,2) は同じスキームとみなされます。
入力フォーマット
1行目はテストデータの番号tです。
次の各行には、スペースで区切られた 2 つの整数MとNが含まれています。
出力フォーマット
入力データMおよびNの各セットについて、割り当てられたメソッドの数を出力するために 1 行を使用します。
データ範囲
0≤t≤20、
1≤M、N≤10
入力サンプル:
1
7 3
出力例:
8
アイデア: i は選択された数値の合計を表し、j は選択された数値の数を表します。dp[i][j] は、合計が i であり、j 個の数値の合計に分割されるスキームを表します。
#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;
}