十七
十七
Published on 2022-12-07 / 152 Visits
0
0

acwing1050. 鸣人的影分身

图标
文章摘要
LIK.CC-GPT

|

题目

image-1670420856491

题解

f[i[[j]表示将i分成j个数有多少中分法。
将一个数字m分成n个数字,有两种分法:

  • 最小值为0,则f[i][j]=f[i][j-1];
  • 最小值不为0,则可以将原方案数每个数字-1,这样方案数不会改变,但是状态会减小,即f[i][j]+=f[i-j][j]
#include<iostream>
using namespace std;
const int N=11;
int T;
int main(){
    cin>>T;
    while(T--){
        int n,m;
        cin>>m>>n;
        int f[N][N]={0};
        f[0][0]=1;
        for(int i=0;i<=m;i++){
            for(int j=1;j<=n;j++){
                f[i][j]=f[i][j-1];
                if(i>=j)f[i][j]+=f[i-j][j];
            }
        }
        cout<<f[m][n]<<endl;
    }
    
    return 0;
}

Comment