获得细分故障

Getting Segmentation Fault

本文关键字:故障 细分      更新时间:2023-10-16

给定一个整数n表示线段的长度。您需要以每次整数为x,y或z的线段的切割长度的方式切割线段。执行所有切割操作后,切割段的总数必须是最大的。

#include <iostream>
#include<vector>
#include<math.h>
#include<climits>
#include<algorithm>
using namespace std;
int count(int*dp,int x,int y,int z,int N)
{
    if(N==0)
    {
        return 1;
    }
    if(N<0)
    {
        return 0;
    }
    if(dp[N]!=INT_MAX)
    {
        return dp[N];
    }
        dp[N]=max(count(dp,x,y,z,x)+count(dp,x,y,z,N-x)
                ,max(count(dp,x,y,z,y)+count(dp,x,y,z,N-y),
                count(dp,x,y,z,z)+count(dp,x,y,z,N-z)));
    return dp[N];
}
int main() 
{
    //code
    int t;
    cin>>t;
    for(int i=0;i<t;i++)
    {
        int n;
        cin>>n;
        int x,y,z;
        cin>>x;
        cin>>y;
        cin>>z;
        //cout<<x<<y<<z<<n;
        int*dp=(int*)malloc(sizeof(int)*n+1);
      // int dp[n+1];
        dp[0]=1;
        for(int i=1;i<=n;i++)
        {
            dp[i]=INT_MAX;
        }
        cout<<x<<y<<z<<n;
        cout<<count(dp,x,y,z,n)<<endl;
    }
    return 0;
}

关于C

中的记忆分配的重要评论

c 不是C。malloc()应该在C 中真正避免,因为它不会照顾对象生命周期,因此,当它用于无动不动的类型时,它需要新的位置。

C 内存分配应使用new(或make_uniquemake_shared与智能指针结合使用)。

,但最好的是避免使用内存分配,而是依靠更安全,更强大的容器,例如向量。

您的问题

说, int是可复制的,使它起作用所需的只是要纠正 sizeof(int)*(n+1)的尺寸公式。这是因为您的循环一直到包含n,因此您的数组必须保留n+1元素。