获得细分故障
Getting Segmentation Fault
给定一个整数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_unique
或make_shared
与智能指针结合使用)。
,但最好的是避免使用内存分配,而是依靠更安全,更强大的容器,例如向量。
您的问题
说, int
是可复制的,使它起作用所需的只是要纠正 sizeof(int)*(n+1)
的尺寸公式。这是因为您的循环一直到包含n
,因此您的数组必须保留n+1
元素。
相关文章:
- 程序接收了信号sigsegv,在代码块中调试时的细分故障
- 双链接列表.细分故障
- 使用std ::复制复制阵列时获取细分故障
- 为什么此代码会产生细分故障
- strcat 3 char从char []到char *在Windows上工作,但在Cygwin中给出了细分故障
- 细分故障 - 将对象通过服务器发送到客户端
- 为什么在C 中调用模板超载运算符时,我会遇到细分故障
- 试图销毁SF ::字体时的细分故障
- 跳过列表中的细分故障
- 从新位置调用函数时C 细分故障
- 程序执行因细分故障而停止:11
- GDB执行时,Apache IGNITE C 客户端应用程序具有许多细分故障
- C 细分故障访问类数据成员,而无需明确使用指针
- 写入文件时的细分故障
- 获得细分故障
- 方法调用上的C 细分故障
- boost :: asio io_service :: run_one导致细分故障
- 在循环的末尾获取细分故障
- C 程序获取细分故障
- C 细分故障由全局变量在单独的源文件中引起