【动态规划】【记忆化搜索】CODEVS 1010 过河卒 2002年NOIP全国联赛普及组
2014-10-28 10:22
477 查看
f(i,j)=f(i-1,j)+f(i,j-1),显然可以暴力递归求解,但是很多重复的状态,所以可以记忆下来。
注意障碍点和边界的特判。
注意障碍点和边界的特判。
#include<cstdio> #include<cstring> using namespace std; int x1,y1,x2,y2,dp[25][25]; bool a[25][25]; const int dx[]={1,-1,1,-1,2,-2,2,-2},dy[]={2,2,-2,-2,1,1,-1,-1}; int f(int x,int y) { if(dp[x][y]!=-1) return dp[x][y]; if(a[x][y]) return dp[x][y]=0; if(x==0) return dp[x][y]=f(x,y-1); if(y==0) return dp[x][y]=f(x-1,y); return dp[x][y]=f(x-1,y)+f(x,y-1); } int main() { scanf("%d%d%d%d",&x1,&y1,&x2,&y2); a[x2][y2]=true; for(int i=0;i<8;i++) { int tx=x2+dx[i],ty=y2+dy[i]; if(tx>=0&&ty>=0) a[tx][ty]=true; } memset(dp,-1,sizeof(dp)); dp[0][0]=(a[0][0] ? 0 : 1); printf("%d\n",f(x1,y1)); return 0; }
相关文章推荐
- 棋盘型动态规划 之 CODE[VS] 1010 过河卒 2002年NOIP全国联赛普及组
- 【动态规划】【记忆化搜索】CODEVS 1011 数的计算 2001年NOIP全国联赛普及组
- 洛谷P1002 Codevs1011 过河卒 --2002年NOIP全国联赛普及组 dp递推
- codevs 1009 产生数 2002年NOIP全国联赛普及组 x (内附解析w)
- 区间型动态规划 之 CODE[VS] 矩阵取数游戏 (2007年NOIP全国联赛提高组)
- 棋盘型动态规划 之 CODE[VS] 1169 传纸条 2008年NOIP全国联赛提高组
- CODE[VS] 1098 均分纸牌 ( 2002年NOIP全国联赛提高组)
- codevs 1094 FBI树 2004年NOIP全国联赛普及组 x
- codevs 1013 求先序排列 2001年NOIP全国联赛普及组 x
- 宽度优先搜索 之 CODE[VS] 1099 字串变换 2002年NOIP全国联赛提高组
- Codevs 5126 推销员 2015年NOIP全国联赛普及组
- code vs 1094 FBI树 2004年NOIP全国联赛普及组
- Codevs 1017 乘积最大 2000年NOIP全国联赛普及组NOIP全国联赛提高组
- codeVS 1083 cantor表(1999年NOIP全国联赛普及组)
- 区间型动态规划 之 CODE[VS] 1154 能量项链 (2006年NOIP全国联赛提高组)
- Codevs 1315 摆花 ——2012年NOIP全国联赛普及组 dp递推
- 【codevs黄金】1098 均分纸牌 2002年NOIP全国联赛提高组
- codeVS 1098 均分纸牌(2002年NOIP全国联赛提高组)
- 划分型动态规划 之 CODE[VS] 1039 数的划分 2001年NOIP全国联赛提高组
- codevs 1014 装箱问题 2001年NOIP全国联赛普及组