#include<bits/stdc++.h>
using namespace std;
int f[20][20];
bool v[20][20];
int main(){
int a,b,n;
cin>>a>>b>>n;
int x,y;
for(int i=0;i<n;i++){
cin>>x>>y;
f[y][x]=0;
v[y][x]=1;
}
for(int i=b;i>0;i--){
for(int j=1;j<=a;j++){
if(i==1||j==1){
f[i][j]=1;
continue;
}
if(v[i][j]){
continue;
}else{
f[i][j]=f[i][j-1]+f[i+1][j];
}
}
}
for(int i=b;i>0;i--){
for(int j=1;j<=a;j++){
cout<<f[i][j]<<" ";
}
cout<<endl;
}
//cout<<f[a][b]<<endl;
return 0;
}
思路有点问题,可以用 bfs 来做这道题。先从(1,1)开始,把(1,1)入队,依次去扩展右、下的节点,如果右、下越界了,或者是设有障碍物,那么也就是说这个点不能扩展,如果当前所扩展完的点合法,那么让它入队,如果扩展点为(a,b)那么 ans++;
当然,动规也是可以的,就是注意状态转移