除算(再帰)

数の除算

タイトルの説明
整数をコンポーネントに分割し、各部分を空にすることはできません。2つのソリューションは同じではありません(順序に関係なく)。

例:次の3つの分類は同じと見なされます。

1,1,5; 1,5,1; 1,1,5。

いくつの異なる部門があるか尋ねてください。

入力形式
2つの整数、および。

出力フォーマット
異なる分割番号を出力します。

サンプル
入力サンプル

7~3
出力サンプル
4つの
サンプル説明
つの分類方法である:1,1,5; 1,2,4; 1,3,3; 2,2,3-。

データ範囲とヒントデータの
100%の場合、6≤n≤200、2≤k≤6。

問題解決のアイデア

F(i、j)はとする
初期値JにIで除算方式の数
ときJ = 1及びiはJ = F(I、J)= 1
:再帰
2つのケース

1. j株の少なくとも1つが1で、プランの数がf(i-1、j-1)
です。2。j株に1がないので、ijをj株に分割することを検討してから、それぞれに移動します。 jはコピー+1を共有し、プランの数はf(ij、j)です。

故有递推式:
f ( i , j ) = f ( i − 1 , j − 1 ) + f ( i − j , j ) f(i,j)=f(i-1,j-1)+f(i-j,j) f i j =f i1 j1 +f ij j

ACコード

#include<cstdio>
#include<algorithm>
using namespace std;
int n,k,f[205][10];
int main()
{
    
    
	scanf("%d%d",&n,&k);
	for(int i=1;i<=n;i++)
	 for(int j=1;j<=min(i,k);j++)
	  if(j==1||i==j)f[i][j]=1;//初值
	  else f[i][j]=f[i-j][j]+f[i-1][j-1];//递归
	printf("%d",f[n][k]);  
 	return 0;
}

ありがとうございました

おすすめ

転載: blog.csdn.net/weixin_45524309/article/details/111400379