为什么在此代码中出现细分错误?

时间:2019-06-16 15:58:49

标签: string c++11 vector segmentation-fault

输入格式: 第1行:整数N,表示二进制字符串的数量。 接下来的N行:等长的字符串

输出格式: 返回最小触摸次数。 (整数)

样本输入:

2 111010 100100

样本输出: 2

int cal(int pos, int mask, vector<string>&v, int **dp){

    if(dp[pos][mask] != INT_MAX){
        return dp[pos][mask];
    }

    if(mask&(mask-1)==0){
        return 0;
    }
    if(pos<0){
        return 10000;
    }

    int mask1=0;
    int mask2=0;
    int count=0;

    for(int i=0;i<v.size();i++){
        if(mask&(1<<i)==1){
            count++;
            if(v[i][pos]=='0'){
                mask1 |= 1<<i;
            }
            else{
                mask2 |= 1<<i;
            }
        }
    }
    int ans = min(count + cal(pos-1,mask1,v,dp) + cal(pos-1,mask2,v,dp) , cal(pos-1,mask,v,dp));
    dp[pos][mask] = ans;
    return ans;
}


int minimumTouchesRequired(int n, vector<string> v) {
    cout<<"here";
    int** dp = new int*[v[0].size()];
    for(int i=0;i<v[0].size();i++){
        dp[i] = new int[(1<<(n+1))];
        for(int j=0;j<(1<<(n+1));j++){
            dp[i][j] = INT_MAX;
        }
    }
    return cal(v[0].size()-1,(1<<n)-1,v,dp);
}

0 个答案:

没有答案