1008 [NOIP2002]过河卒 线性DP 动态规划
链接:https://ac.nowcoder.com/acm/contest/24213/1008
来源:牛客网
题目描述
输入描述:
输入B点的坐标(n,m)以及对方马的坐标(X,Y){不用判错}
输出描述:
输出一个整数(路径的条数)。
分析
因此,我们在赋初值时,要专门考虑最上和最左一列的情况,具体方法参见代码
哦,对了,这道题的数据可能很大,注意要开long long,否则会炸
易错点
1.数据太大,开LL
2.数组越界。
//-------------------------代码----------------------------
#define int LL
const int N = 70;
int n,m;
int vis[N][N];
int mp[N][N];
void solve()
{
cin>>n>>m;
// n ++ ,m ++ ;
memset(vis,0,sizeof vis);memset(mp,0,sizeof mp);
mp[0][0] = 1;
int x,y;cin>>x>>y;
// x ++ ,y ++ ;
vis[x][y] = 1;
for(int i = 0;i<8;i++) {
int xx = x + dx[i],yy = y + dy[i];
if(xx < 0 || yy < 0 ) continue;
vis[xx][yy] = 1;
}
for(int i = 0;i<=n;i++) {
for(int j = 0;j<=m;j++) {
if(vis[i][j]) {
mp[i][j] = 0;
} else {
if(i - 1 >= 0) {
mp[i][j] += mp[i-1][j];
}
if(j - 1 >= 0) {
mp[i][j] += mp[i][j-1];
}
if(vis[i][j] == 1) mp[i][j] = 0;
}
}
}
// fo(i,0,n) {
// fo(j,0,m) {
// cout<<mp[i][j]<<' ';
// }cout<<endl;
// }
cout<<mp[n][m]<<endl;
}
signed main(){
clapping();TLE;
// int t;cin>>t;while(t -- )
solve();
// {solve(); }
return 0;
}
/*样例区
*/
//------------------------------------------------------------

浙公网安备 33010602011771号