当前位置:   article > 正文

P1002 过河卒:图论动态规划入门

P1002 过河卒:图论动态规划入门

本题链接:P1002 [NOIP2002 普及组] 过河卒 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

思路:

  本题与之前的动态规划不一样,比如背包问题和子序列问题等都是线性dp,也就是dp数组其实主要用于存储计算的结果,而这题中的dp数组除了存储结果外,还有 图的作用

  • f[ i ][ j ] 表示走到点(i,j)的路的数
  • 卒只能走右和下,因此 f [ i ] [ j ] += f [ i - 1][ j] + f [ i ][ j - 1] ;

代码:

  ac代码:

  1. #include<iostream>
  2. #include<cmath>
  3. #include<vector>
  4. using namespace std;
  5. int n,m,a,b;//(m,n)是目标点,(a,b)是马
  6. //马的路
  7. int dx[8] = {-1,-2,-2,-1,1,2,2,1};
  8. int dy[8] = {-2,-1,1,2,-2,-1,1,2};
  9. const int N = 30;
  10. int limit[N][N];
  11. long long f[N][N];
  12. int main(){
  13. cin >> n >> m >> a >> b;
  14. limit[a][b] = true;
  15. for(int i = 0;i < 8;i++){
  16. limit[a + dx[i]][b + dy[i]] = true;
  17. }
  18. f[0][0] = 1;
  19. for(int i = 0;i <= n;i++){
  20. for(int j = 0;j <= m;j++){
  21. if(!limit[i][j]){
  22. if(i) f[i][j] += f[i-1][j];
  23. if(j) f[i][j] += f[i][j-1];
  24. }
  25. }
  26. }
  27. cout << f[n][m];
  28. return 0;
  29. }

在贴一个dfs的代码,过了40/100,其他的超时了

  1. #include<iostream>
  2. #include<cmath>
  3. #include<vector>
  4. using namespace std;
  5. int n,m,a,b;//(m,n)是目标点,(a,b)是马
  6. //马的路
  7. int dx[8] = {-1,-2,-2,-1,1,2,2,1};
  8. int dy[8] = {-2,-1,1,2,-2,-1,1,2};
  9. const int N = 22;
  10. int mp[N][N];
  11. int limit[N][N];
  12. int res = 0;
  13. int dn[2] = {1,0};
  14. int dm[2] = {0,1};
  15. int charge(int x,int y){
  16. if(x < 0 || x > n || y < 0 || y > m) return false;
  17. return true;
  18. }
  19. void dfs(int x,int y){
  20. if(x == n && y == m){
  21. res ++;
  22. return;
  23. }
  24. for(int i = 0;i < 2;i++){
  25. int nowx = x + dn[i],nowy = y + dm[i];
  26. if(charge(nowx,nowy) && !limit[nowx][nowy]){
  27. dfs(nowx,nowy);
  28. }
  29. }
  30. }
  31. int main(){
  32. cin >> n >> m >> a >> b;
  33. limit[a][b] = true;
  34. for(int i = 0;i < 8;i++){
  35. limit[a + dx[i]][b + dy[i]] = true;
  36. }
  37. dfs(0,0);
  38. cout << res;
  39. return 0;
  40. }

以上是本文全部内容,如果对你有帮助点个赞再走吧~  ₍˄·͈༝·͈˄*₎◞ ̑̑

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/409803
推荐阅读
相关标签
  

闽ICP备14008679号