• 记忆化搜素


    记忆化搜素,即是dfs+dp,保存每次搜素到的结果,可以当模板记住

    入门:http://poj.org/problem?id=1088

     
    import java.util.*;
     
    public class Main1 {
        static int a[][] = new int[105][105];
        static int g[][]={{-1,0},{0,1},{1,0},{0,-1}};
        static int dp[][] = new int[105][105];
       public static int dfs(int x,int y, int a[][],int n,int m){
           if(dp[x][y]>0)return dp[x][y];
           dp[x][y]=1;
           for(int i=0;i<4;i++){
               int xx = x+g[i][0];
               int yy = y+g[i][1];
               if(xx>=0&&yy>=0&&yy<m&&xx<n&&a[xx][yy]<a[x][y]){
                   dp[x][y]=Math.max(dp[x][y], dfs(xx,yy,a,n,m)+a[x][y]);
               }
           }
           return dp[x][y];
       }
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            int n  =sc.nextInt();
            int m  = sc.nextInt();
            for(int i=0;i<n;i++)
                for(int j=0;j<m;j++)
                    a[i][j]=sc.nextInt();
            int max=0;
            for(int i=0;i<n;i++)
                for(int j=0;j<m;j++)
                {
                    int tep=dfs(i,j,a,n,m);
                    if(tep>max)
                        max=tep;
                          }
            System.out.println(max);
        }    
        }
     
        

    http://acm.hdu.edu.cn/showproblem.php?pid=1078

     
    
    import java.util.*;
     
    public class Main1 {
        static int a[][] = new int[105][105];
        static int g[][]={{-1,0},{0,1},{1,0},{0,-1}};
        static int dp[][] = new int[105][105];
       public static int dfs(int x,int y, int a[][],int n,int k){    此时的k是走的最大步数
           if(dp[x][y]>0)return dp[x][y];
    //       dp[x][y]=1;
           int temp,ans=0;
           for(int j=1;j<=k;j++)
           for(int i=0;i<4;i++){
               
               int xx = x+j*g[i][0];
               int yy = y+j*g[i][1];
               if(xx>=0&&yy>=0&&yy<n&&xx<n&&a[xx][yy]>a[x][y]){
                   temp = dfs(xx, yy, a, n, k);
                  if(temp>ans)
                      ans= temp;
               }
               dp[x][y]=ans+a[x][y];
           }
           return dp[x][y];
       }
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            int n  =sc.nextInt();
            int m  = sc.nextInt();
    //        Arrays.fill(dp, 0);
            for(int i=0;i<n;i++)
                for(int j=0;j<n;j++)
                    dp[i][j]=0;
            for(int i=0;i<n;i++)
                for(int j=0;j<n;j++)
                    a[i][j]=sc.nextInt();
            int max=0;
    //        for(int i=0;i<n;i++)
    //            for(int j=0;j<m;j++)
    //            {
    //                int tep=dfs(i,j,a,n,m);
    //                if(tep>max)
    //                    max=tep;
    //                      }
            max = dfs(0, 0, a, n, m);
            System.out.println(max);
        }    
        }
     
        
  • 相关阅读:
    serialize
    事件委托
    javascript checkbox 全选
    动态加载javascript和css
    使用javascript替换img标签里的src属性图片不显示的原因(IE6)
    unique
    android 判断网络状态
    httpclient超时
    android 根据uri获取路径
    HttpClientAdapter(工具类)
  • 原文地址:https://www.cnblogs.com/ls-pankong/p/10507510.html
Copyright © 2020-2023  润新知