#include <iostream> #include <string> using namesp

#include #include using namespace std; int dp[115][115]; int main() { int t; cin>>t; while(t–) { int i,j,n,m; int a[115][115]; cin>>n>>m; memset(dp,0,sizeof(dp)); for(i=1;i<=n;i++) for(j=1;j<=m;j++) cin>>a[i][j]; dp[1][1]=1; for(i=1;i<=n;i++) for(j=1;j<=m;j++) { if(dp[i][j]){ int d=a[i][j]; int x,y; for(x=0;x<=d;x++) { for(y=0;y<=d;y++) { if(x+y==0) continue; if(x+y>d) break; int di=x+i,dj=y+j; if(x+i<=n&&y+j<=m) dp[di][dj]+=dp[i][j]; dp[di][dj]%=10000; } } } } cout<

把代码贴到代码框里哦,说明什么问题很重要。

这个代码为什么会报 Runtime Error(ACCESS_VIOLATION) 如果把全局变量二维数组dp换为和二维数组a一起定义就ac了,这是什么原因? #include #include using namespace std; int dp[115][115]; int main() { int t; cin>>t; while(t–) { int i,j,n,m; int a[115][115]; cin>>n>>m; memset(dp,0,sizeof(dp)); for(i=1;i<=n;i++) for(j=1;j<=m;j++) cin>>a[i][j]; dp[1][1]=1; for(i=1;i<=n;i++) for(j=1;j<=m;j++) { if(dp[i][j]){ int d=a[i][j]; int x,y; for(x=0;x<=d;x++) { for(y=0;y<=d;y++) { if(x+y==0) continue; if(x+y>d) break; int di=x+i,dj=y+j; if(x+i<=n&&y+j<=m) dp[di][dj]+=dp[i][j]; dp[di][dj]%=10000; } } } } cout<