gfg 上有一个名为“Partition with Given Difference”的问题问题链接:-https://practice.geeksforgeeks.org/problems/partitions-with-given-difference/1?utm_source=youtube&utm_medium=collab_striver_ytdescription&utm_campaign=partitions-有给定的差异
问题:- 给定一个数组 arr,将其分成两个子集(可能为空),使得它们的并集是原始数组。设这两个子集的元素之和为S1和S2。
给定一个差值d,统计S1大于等于S2且S1和S2的差值等于d的分区个数。因为答案可能很大返回它模 109 + 7.
例一:
输入: n = 4, d = 3 arr[] = { 5, 2, 6, 4} 输出: 1个 解释: 这个数组只有一个可能的分区。分区:{6, 4}, {5, 2}。子集和的子集差为:(6 + 4) - (5 + 2) = 3.
我的解决方案:-
class Solution {
public:
int countPartitions(int n, int d, vector<int>& arr) {
int modulo=1000000007;
int sum=0;
for(int i=0;i<n;i++){
sum+=arr[i];
}
if((sum+d)%2)
return 0;
int find=(sum+d)/2;
int dp[n+1][find+1]; //if i use 2d int array it's giving segmentation fault but if i use 2d vector it's working perfectly fine
memset(dp,0,sizeof(dp));
for(int i=0;i<=n;i++){
for(int j=0;j<=find;j++){
if(i==0)
dp[i][j]=0;
}
}
dp[0][0]=1;
for(int i=1;i<=n;i++){
for(int j=0;j<=find;j++){
if(arr[i-1]<=j)
dp[i][j]=(dp[i-1][j-arr[i-1]] + dp[i-1][j])%modulo;
else
dp[i][j]=dp[i-1][j];
}
}
return dp[n][find]%modulo;
}
};`
然而这是给分段错误gfg 问题
我的问题是为什么它会出现分段错误??