1050. 鸣人的影分身

整数划分问题:900. 整数划分

注意划分出的数可以取\(0\)。

const int N=1010;
int f[N][N];
int n,m;

int main()
{
    int T;
    cin>>T;
    while(T--)
    {
        memset(f,0,sizeof f);
        
        cin>>m>>n;

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

    //system("pause");
    return 0;
}

完全背包求方案数

const int N=1010;
int f[N];
int n,m;

int main()
{
    int T;
    cin>>T;
    while(T--)
    {
        memset(f,0,sizeof f);
        
        cin>>m>>n;
        
        f[0]=1;
        for(int i=1;i<=n;i++)
            for(int j=i;j<=m;j++)
                f[j]+=f[j-i];

        cout<<f[m]<<endl;
    }
    
    //system("pause");
    return 0;
}
上一篇:2021.04.03【NOIP提高B组】模拟 总结


下一篇:【ybtoj 高效进阶 3.2】【最小生成树】 新的开始