繁体   English   中英

将 n 写为两个或多个正整数之和的方法

[英]Ways to write n as sum of two or more positive integers

我在网上找到了一个关于计算将 n 写为两个或多个正整数之和的方法的代码。

我无法理解该功能是如何工作的。 请谁能给我解释一下

class sum
{
    static int countways(int n)
    {
        int table[]= new int[n+1];
        Arrays.fill(table,0);
        table[0]=1;
        for(int i=1;i<n;i++)
        {
            for(int j=i;j<=n;j++)
            {
                table[j]+=table[j-i];
            }
        }
        return table[n];
    }

    public static void main(String args[])
    {
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        countways[n];


    }
}

对于从 1 到 n 的所有整数,它计算将 n 写为两个或多个正整数之和的方式。

这个想法是:

n = n0 + n1 + ... + nx = n0 + (n - n0)

我们迭代 n0 的可能值并查看我们建立的表格,直到那时为止有多少种表达方式 (n - n0)。

这是动态规划更一般思想的一个很好的例子。 一般的想法是,如果我们有一个递归问题,其中很多子问题是相同的,我们可以通过保存子问题的结果并重用它们来节省时间。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM