CODEVS 1010过河卒
2016-10-29 09:16
225 查看
hljs cpp">#include<iostream> #include<string.h> using namespace std; int n,m,x,y,f[25][25],vis[25][25]; int d(int a,int b){d(a,b)表示从(0,0)到(a,b)的路径总数,所以逆向递归,只能向上或向左 if(f[a]>=0) return f[a][b]; else if(a==0&&b==0) return 1;//走到终点总数加一 else{ int j=0,k=0; if(a-1>=0&&vis[a-1][b]!=1) j=d(a-1,b);//判断是否合法,向上 if(b-1>=0&&vis[a][b-1]!=1) k=d(a,b-1);//判断是否合法,向左 return f[a][b]=(j+k); } } int main(){ memset(f,-1,sizeof(f)); //初值不能赋0!!! freopen("1010.in","r",stdin); freopen("1010.out","w",stdout); cin>>n>>m>>x>>y; vis[x][y]=1;//标记马控制的9个位置,包括马自己!!! if(x+1<=n&&y-2>=0) vis[x+1][y-2]=1; if(x+2<=n&&y-1>=0) vis[x+2][y-1]=1; if(x+2<=n&&y+1<=m) vis[x+2][y+1]=1; if(x+1<=n&&y+2<=m) vis[x+1][y+2]=1; if(x-1>=0&&y-2>=0) vis[x-1][y-2]=1; if(x-2>=0&&y-1>=0) vis[x-2][y-1]=1; if(x-2>=0&&y+1<=m) vis[x-2][y+1]=1; if(x-1>=0&&y+2<=m) vis[x-1][y+2]=1; cout<<d(n,m); return 0; }
题解:记忆化搜索,d(a,b)表示[b]从(0,0)到(a,b)的路径总数
相关文章推荐
- CODEVS 1010 过河卒(棋盘型DP)
- codevs 1010 过河卒 dfs
- DFS练习-codevs-1010过河卒
- wikioi 1010 过河卒 普及组 2002
- 1010 过河卒 (dfs)
- code[vs] 1010过河卒(棋盘型dp)
- CODEVS 1010 过河卒
- wikioi 1010 过河卒 (2002年NOIP全国联赛普及组)
- 【codevs 1010】过河卒
- Codevs 1010 过河卒== 洛谷 1002
- CodeVS 1010 过河卒
- 1010 过河卒
- code(vs)1010 过河卒 (棋盘dp)
- 1010 过河卒
- codevs1010 过河卒(棋盘dp)
- codevs1010 过河卒(棋盘dp)
- Codevs 1010 过河卒 2002年NOIP全国联赛普及组
- Code[vs]1010过河卒(dfs不成+棋盘dp)
- Codevs 4768 跳石头
- Codevs 1140 Jam的计数法