我的代码编译并正确运行,除非我移动int res[2000+1][2000+1];
内部 main 我得到分段错误为什么会发生这种奇怪的行为?为什么在本地定义变量会导致分段错误?
#include <iostream>
#include <vector>
#include <algorithm>
#include <stdio.h>
#define ll long long int
#define S(a) scanf("%d",&(a))
#define SL(a) scanf("%lld", &(a))
#define P(a) printf("%d",(a))
#define PL(a) printf("%lld",(a))
#define PTR(a) printf("%s",(a))
#define STR(a) scanf("%s",(a))
#define SP printf(" ")
#define pb push_back
#define mp make_pair
using namespace std;
bool sort_pred(const pair<int,int>& left, const pair<int,int>& right)
{
return left.first < right.first;
}
int res[2000+1][2000+1];
int main()
{
int s,n;
S(s);S(n);
vector <int> v (n+1);
vector <int> w(n+1);
for(int i=0;i<n;++i)
{
cin>>w[i];
cin>>v[i];
}
for(int i=0;i<=n;++i)
{
for(int j=0;j<=s;++j)
{
if(i==0 ||j==0)
res[i][j]=0;
else if(w[i-1]<=j)
{
res[i][j]=max(res[i-1][j-w[i-1]]+v[i-1],res[i-1][j]);
}
else
res[i][j]=res[i-1][j];
}
}
std::cout<<res[n][s];
return 0;
}