为什么它在 2d 数组中给出分段错误而不是在 int 类型的 2d 向量中?

问题描述 投票:0回答:0

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 问题

我的问题是为什么它会出现分段错误??

c++ arrays vector dynamic-programming dsa
© www.soinside.com 2019 - 2024. All rights reserved.