【发布时间】:2017-11-13 04:08:30
【问题描述】:
虽然您可以拥有任意数量的 arrays,但假设您有两个 arrays {1,2,3,4,5,6} 和 {1,2,3,4,5,6 }
您必须在 array 两个元素的参与下找出它们的总和是否为 4。即
1 from array1, 3 from array2
2 from array1, 2 from array2
3 from array1, 1 from array2
等
简而言之:想要实现子集求和算法,其中有两个数组,并从两个数组中选择数组元素来组成目标和
这是我用于array的子集总和算法
bool subset_sum(int a[],int n, int sum)
{
bool dp[n+1][sum+1];
int i,j;
for(i=0;i<=n;i++)
dp[i][0]=true;
for(j=1;j<=sum;j++)
dp[0][j]=false;
for(i=1;i<=n;i++)
{
for(j=1;j<=sum;j++)
{
if(dp[i-1][j]==true)
dp[i][j]=true;
else
{
if(a[i-1]>j)
dp[i][j]=false;
else
dp[i][j]=dp[i-1][j-a[i-1]];
}
}
}
return dp[n][sum];
}
【问题讨论】:
-
所有阵列的参与是必须的吗?
-
最初的“掷骰子”公式更加清晰。
-
是的,两个数组都必须参与
-
-MBo 我认为这会令人困惑
-
@Andrew Watson 现在看起来完全不同的问题。并且不清楚。你最好表现出真正的问题。
标签: algorithm dynamic-programming subset-sum