Algorithm n元线性方程的解的个数
这是使用自下而上的方法,并且 假设Algorithm n元线性方程的解的个数,algorithm,dynamic-programming,Algorithm,Dynamic Programming,这是使用自下而上的方法,并且 假设j=3和j-coeff[i]=2 那么d[3]=d[3]+d[2]如何给出解决方案呢?以前的结果和当前结果的简单相加如何给出线性变量的总解 假设您有无限数量的值为2,3,5的硬币(您的coeff[]),并且您想知道一些解决方案的数量,以便生成某种求和形式的硬币集 在第一次循环运行时,您用硬币2填充表格。表将被填满 // Fill table in bottom up manner for (int i=0; i<n; i++)
j=3
和j-coeff[i]=2
那么
d[3]=d[3]+d[2]
如何给出解决方案呢?以前的结果和当前结果的简单相加如何给出线性变量的总解 假设您有无限数量的值为2,3,5的硬币(您的coeff[]
),并且您想知道一些解决方案的数量,以便生成某种求和形式的硬币集
在第一次循环运行时,您用硬币2填充表格。表将被填满
// Fill table in bottom up manner
for (int i=0; i<n; i++)
for (int j=coeff[i]; j<=rhs; j++)
dp[j] += dp[j-coeff[i]];
因为只有这样的硬币才能得到相等的金额
在第二次循环运行时,您用硬币3填充表-现在您将得到可能由硬币2和3组成的总和
idx 0 1 2 3 4 5 6
num 1 0 1 0 1 0 1
请注意,第5单元中填充了2+3-与您的提问情况类似,第6单元现在包含两种变体:2+2+2和3+3假设您有无限数量的值为2,3,5的硬币(您的
coeff[]
),并且您想知道一些解决方案的数量,以形成一套硬币
在第一次循环运行时,您用硬币2填充表格。表将被填满
// Fill table in bottom up manner
for (int i=0; i<n; i++)
for (int j=coeff[i]; j<=rhs; j++)
dp[j] += dp[j-coeff[i]];
因为只有这样的硬币才能得到相等的金额
在第二次循环运行时,您用硬币3填充表-现在您将得到可能由硬币2和3组成的总和
idx 0 1 2 3 4 5 6
num 1 0 1 0 1 0 1
请注意,单元格5中填充了2+3-与您的提问情况类似,单元格6现在包含两个变体:2+2+2和3+3很抱歉,但我仍然对这个问题感到困惑。“我不知道如何将递归方法更改为DP方法,”Hoang Nam I描述了DP方法(自下而上的方法)。这类问题的递归通常从末尾开始(自上而下的方式),可以很容易地用自上而下的DP-memonization来代替,但是转换到自下而上(表)方式要复杂一些。很抱歉,我仍然对这个问题感到困惑。“我不知道如何将递归方法更改为DP方法,”Hoang Nam I描述了DP方法(自下而上的方法)。这类问题的递归通常从末尾开始(自上而下的方式),可以很容易地用自上而下的DP-memonization来代替,但是转换到自下而上(表)方式要复杂一些。