zoukankan      html  css  js  c++  java
  • HDU 1078 FatMouse and Cheese(记忆化搜索DP)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1078

    题目大意:一个n*n的图,每个点都有奶酪,老鼠从(0,0)开始走,每次最多只能走k步就要停下来,停下的这个位置的奶酪数只能比上一个停留的位置大,并获取其奶酪,每次只能水平或垂直走,问最多能得到的奶酪。

    解题思路:记忆化搜索,这方面还是写的太少,还要看别人才会,这个就当个例子参考吧。

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<algorithm>
     4 using namespace std;
     5 const int N=1e2+5;
     6 int a[N][N],dp[N][N];
     7 int d[4][2]={{-1,0},{1,0},{0,-1},{0,1}};
     8 int n,k;
     9 
    10 int dfs(int x,int y){
    11     int res=0;
    12     if(dp[x][y]) return dp[x][y];
    13     for(int i=0;i<4;i++){
    14         for(int j=1;j<=k;j++){
    15             int xx=x+d[i][0]*j;
    16             int yy=y+d[i][1]*j;
    17             if(xx<1||xx>n||yy<1||yy>n)
    18                 continue;
    19             if(a[xx][yy]>a[x][y])
    20                 res=max(res,dfs(xx,yy));
    21         }
    22     }
    23     dp[x][y]=res+a[x][y];
    24     return dp[x][y];
    25 }
    26 
    27 int main(){
    28     while(~scanf("%d%d",&n,&k)){    
    29         if(n==-1&&k==-1)
    30             break;
    31         memset(dp,0,sizeof(dp));
    32         for(int i=1;i<=n;i++){
    33             for(int j=1;j<=n;j++){
    34                 scanf("%d",&a[i][j]);
    35             }
    36         }
    37         printf("%d
    ",dfs(1,1));
    38     }
    39     return 0;
    40 } 
  • 相关阅读:
    如何勾选 servlet如何获取?
    过滤器 如何实现获取不到用户名跳转回登录界面
    验证码
    cookie保存用户名及密码
    游标
    存储过程和自定义函数的区别
    瞎搞
    sql 试图索引
    sql 常用函数
    sql 简单的定义变量 声明 输出
  • 原文地址:https://www.cnblogs.com/fu3638/p/7502557.html
Copyright © 2011-2022 走看看