过河卒
来源:互联网 发布:移动有4g十加网络吗 编辑:程序博客网 时间:2024/05/07 07:01
http://www.rqnoj.cn/Problem_69.html
坐标DP问题,本题比较简单,动规方程dp[i][j] = dp[i-1][j] + dp[i][j-1] ,对于特殊的点,只需要判断一下,然后赋值为0即可。虽然数据规模比较小,但是结果却比较大,需要用long long存储,同时输出的时候用%I64d输出,用%lld出错。代码如下:
/*ID: csuchenanPROG: 过河卒LANG: C++*/#include<iostream>#include<stdio.h>#include<string.h>const int maxn = 30 ;long long dp[maxn][maxn] ;int dir[8][2] ={{-2 , 1} , {-1 , 2} , {1, 2} , {2 , 1} ,{2 , -1} , {1 , -2} ,{-1 ,-2} ,{-2,-1}};int n ;int m ;int x ;int y ;bool judge(int i , int j){int k ;if(i==x && y==j)return 0 ;for(k = 0 ; k < 8 ; k ++){if(x + dir[k][0] == i && y + dir[k][1] == j)return 0 ;}return 1 ;}int main(){while(scanf("%d %d %d %d" , &n , &m , &x , &y)!=EOF){int i ;int j ;memset(dp , 0 , sizeof(dp)) ;dp[0][0] = 1 ;for(i = 0 ; i <= n ; i ++){for(j = 0 ; j <= m ; j ++){if(judge(i ,j)){if(i - 1 >= 0)dp[i][j] += dp[i-1][j] ;if(j - 1 >= 0)dp[i][j] += dp[i][j-1] ;}else{dp[i][j] = 0 ;}}}printf("%I64d\n" , dp[n][m]) ;}return 0 ;}
- 过河卒
- 过河卒
- 过河卒
- 过河卒
- 过河卒
- 过河卒
- 过河卒
- 过河卒
- 过河卒
- 过河卒
- 过河卒
- 过河卒
- 过河卒
- 过河卒
- 过河卒
- 过河卒
- 过河卒
- 过河卒
- 内核构造skb数据包的实现总结
- android Gallery与ImageView的结合使用
- 人生的34个好习惯
- 最愚蠢的投资
- error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
- 过河卒
- JDBC总结
- CentOS 5.*及6.* 关闭多余 tty以节省内存
- mysql 常用命令整理 - 持续更新
- win7下.NET连接oracle,提示错误OCIEnvCreate 失败,返回代码为 -1,但错误消息文本不可用
- eclipse开发java web应用时注意点
- linux内存小记1
- 唯物辩证法的三大规律
- iOS开发之进度条——MBProgressHUD