int n,j, w[100],arr[100];
bool prr[100];
int jueduizhi(int x, int y)
{
if (x >= y) return (x - y);
if (x < y) return (y - x);
}
void dfs(int x, int y)
{
int t = jueduizhi(x, y);
if (!prr[t])
{
arr[j] = t;
j++;
prr[t] = 1;
}
for (int i = 1; i <= n; i++)
{
dfs(x + w[i], y);
dfs(x, y + w[i]);
}
}
int main()
{
cin >> n;
for (int i = 1; i <= n; i++)
{
cin >> w[i];
}
dfs(0, 0);
cout << j << endl;
return 0;
}
参考GPT和自己的思路:
在这段代码中,当使用递归函数dfs进行搜索时,arr[j]=t的赋值操作会在不同的递归层次上进行,这可能导致出现重复的元素。因此,可以通过在dfs函数中添加一个bool型数组prr来避免这种情况的发生。当通过jueduizhi函数获得t值,如果prr[t]等于0,则可以将t添加到arr数组中,并将prr[t]设置为1,以表示t已经被添加到了arr数组中。这样做可以避免重复添加相同的元素,确保最终结果的正确性。
j未赋初值0