c++ - 第一行的分段错误
问题描述
今天我正在解决一个问题,我编写了解决方案,我在第一行遇到了分段错误,我尝试了很多东西,但没有任何效果
#include <bits/stdc++.h>
using namespace std;
typedef unsigned long long int ll;
#define fastio ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
#define INF 0x3f3f3f3f3f
ll dist(ll x1 , ll x2 , ll y1 , ll y2){
ll x = (x1-x2)*(x1-x2);
ll y = (y1-y2)*(y1-y2);
return ( x+y );
}
int main() {
fastio;
ll n,m;
ll a[1005][2];
ll b[1005][2];
ll dp[1005][1005][2];
cin >> n >> m;
for(ll i = 1; i <= n; i++) cin >> a[i][0] >> a[i][1];
for(ll i = 1; i <= m; i++) cin >> b[i][0] >> b[i][1];
for(ll i = 0; i <= n; i++) {
for (ll j = 0; j <= m; j++) {
dp[i][j][0] = INF;
dp[i][j][1] = INF;
}
}
dp[0][0][0] = 0;
dp[0][0][1] = 0;
dp[1][0][0] = 0;
for(ll i = 1; i <= n; i++){
for(ll j = 0; j <= m; j++){
// dp[i][j][0] :
if(i > 1) dp[i][j][0] = min(dp[i][j][0] , dp[i-1][j][0] + dist(a[i-1][0] , a[i][0] , a[i-1][1] , a[i][1]));
if(i > 1 && j >= 1 ) dp[i][j][0] = min(dp[i][j][0] , dp[i-1][j][1] + dist(b[j-1][0] , a[i][0] , b[j-1][1] , a[i][1]));
// dp[i][j][1] :
if(j > 1 ) dp[i][j][1] = min(dp[i][j][1] , dp[i][j-1][0] + dist(a[j-1][0] , b[j][0] , a[j-1][1] , b[j][1]));
if(j > 1 ) dp[i][j][1] = min(dp[i][j][1] , dp[i][j-1][1] + dist(b[j-1][0] , b[j][0] , b[j-1][1] , b[j][1]));
}
}
cout << dp[n-1][m-1][0];
return 0;
}
这是我的代码:https ://pastebin.com/MzbX2HPQ
请让我知道我应该改变什么?
谢谢 Sudheera YS
解决方案
问题就在这里(我不会使用typedef
,而是使用实际类型):
int main()
{
long long a[1005][2];
long long b[1005][2];
long long dp[1005][1005][2];
//...
}
由于这些数组是本地的main
,因此需要有足够的堆栈内存来保存这些数组。如果我们假设它sizeof(long long)
是 8,那么使用的总内存超过 16 兆字节。大多数编译器的默认堆栈大小小于 8 兆字节。
因此,为了防止这种情况,应该从堆中进行分配。这可以通过以下方式完成std::vector
:
#include <vector>
using Array1D = std::vector<long long>;
using Array2D = std::vector<Array1D>;
using Array3D = std::vector<Array2D>;
int main()
{
Array2D a(1005, Array1D(2)) ;
Array2D b(1005, Array1D(2)) ;
Array3D dp(1005, Array2D(1005, Array1D(2)));
//...
}
推荐阅读
- java - Jax rs 控制器设置上传文件大小限制
- spring-integration - 为每个 Ftp 文件同时运行 Spring Integration 流程
- css - 如何禁用按钮单击样式css
- angular - Angular - 订阅中的函数从未在单元测试中调用
- reactjs - CustomHook -> useDispach = 找不到 react-redux 上下文值;请确保组件被包裹在一个
- reactjs - 打字稿没有捕捉到错误类型的道具
- continuous-integration - 如何有条件地运行 CI 阶段
- python - 如何替换列表中不需要的字符额外引号
- java - Spring Boot 无法自动装配
- scala - 写入时 Spark Merge 模式 - 出现错误:“现有表的列号与数据不匹配