Iグローバル2次元配列を宣言するときhttp://www.spoj.com/problems/EDIST/を解決しながら(http://ideone.com/jG3jPW)spojの "Edit distance"で2次元配列を宣言すると、ランタイムエラーが発生しますか?
#include <iostream>
using namespace std;
long long int s[2001][2001];
int main() {
int t;
string a,b;
long long int i,j;
for(i=0;i<2001;i++)
{
s[i][0]=i;
s[0][i]=i;
}
cin>>t;
while(t>0)
{
cin>>a>>b;
t--;
for(i=1;i<=a.length();i++)
{
for(j=1;j<=b.length();j++)
{
if(a[i-1] == b[j-1])
s[i][j]=s[i-1][j-1];
else
s[i][j] = min(min(s[i-1][j],s[i-1][j-1]),s[i][j-1]) + 1;
}
}
cout<<s[i-1][j-1]<<"\n";
}
return 0;
}
エラーが発生しません。私はローカルに同じ配列(http://ideone.com/Tyj6UU)を宣言する場合でも、
#include <iostream>
using namespace std;
int main() {
int t;
string a,b;
long long int i,j;
long long int s[2001][2001]; //declared locally
for(i=0;i<2001;i++)
{
s[i][0]=i;
s[0][i]=i;
}
cin>>t;
while(t>0)
{
cin>>a>>b;
t--;
for(i=1;i<=a.length();i++)
{
for(j=1;j<=b.length();j++)
{
if(a[i-1] == b[j-1])
s[i][j]=s[i-1][j-1];
else
s[i][j] = min(min(s[i-1][j],s[i-1][j-1]),s[i][j-1]) + 1;
}
}
cout<<s[i-1][j-1]<<"\n";
}
return 0;
}
実行時エラーが発生します。どうして?
ヒント:このウェブサイトの名前は何ですか? – feersum
ヒント: 'std :: vector'を使用して、必要なだけのスペースを必要とし、動的メモリ割り当てを使用します。これは、一般にはるかに大きなメモリプールです。 – NathanOliver