G - How many ways
int dfs(int i, int j){
if(i==n&&j==m)
return 1;
int r=d[i][j];
if(r!=-1)
return r;
r=0;
for(int k=i;k<=n;k++){
for(int l=j;l<=m;l++){
if(k==i&&l==j)
continue;
if(k-i+l-j<=a[i][j])
r=(r+dfs(k,l))%mod;
else
break;
}
}
return r;
}
这里用r在函数中定义了一个变量
超时
int dp(int i,int j) {
if(i==n&&j==m) return 1;
int& ans = d[i][j];
if(ans != -1) return ans;
ans = 0;
for(int k=i;k<=n;k++) {
for(int l=j;l<=m;l++) {
if(k==i&&l==j) continue;
if(k-i+l-j <= a[i][j]) ans = (ans + dp(k,l))%mod;
else break;
}
}
return ans;
}
这里引用了主函数里的ans
能过
为什么呢