只要告诉我为什么WA即可
#include<bits/stdc++.h>
#define mod 10007
using namespace std;
int n,m,ans;
char c[250][250];
void dfs(int p){
if(p>n*m){
ans++;
if(ans>=mod) ans-=mod;
return;
}
int x=(p-1)/m+1,y=(p-1)%m+1;
if(c[x][y]=='.'){
c[x][y]='0';
dfs(p+1);
c[x][y]='1';
if(c[x-1][y]!='1'&&c[x][y-1]!='1') dfs(p+1);
c[x][y]='.';
}else dfs(p+1);
}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++) scanf("%s",c[i]+1);
dfs(1);
printf("%d",ans);
return 0;
}
还有我的动规代码过不了样例:
#include<bits/stdc++.h>
#define mod 10007
using namespace std;
int n,m,dp[250][250][2];
char c[250][250];
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++) scanf("%s",c[i]+1);
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
for(int k=0;k<2;k++){
if(c[i][j]=='0'&&k||c[i][j]=='1'&&!k) dp[i][j][k]=0;
else{
if(k) dp[i][j][k]=dp[i-1][j][0]+dp[i][j-1][0];
else dp[i][j][k]=dp[i-1][j][0]+dp[i-1][j][1]+dp[i][j-1][0]+dp[i][j-1][1];
if(c[i][j]=='0'||c[i][j]=='1') dp[i][j][k]++;
dp[i][j][k]%=mod;
}
}
}
}
printf("%d",(dp[n][m][0]+dp[n][m][1])%mod);
return 0;
}