矩阵嵌套问题(DAG上的动态规划)

今天第一次接触动态规划的算法思想,编写了ACM的矩阵嵌套问题
矩阵嵌套问题(DAG上的动态规划)_第1张图片
算法思想概述:读入数据后存储在HashMap中,根据题目要求计算DAG,并存储在临街矩阵中,然后用记忆化搜索的方法求得DAG上的最长路径即可
核心代码是static int dp(int i)

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Scanner;
/**
 * 南阳理工ACM   矩阵嵌套  
 * DAG上的动态规划   用邻接矩阵保存图
 * */
public class 矩阵嵌套 {
    static int[][] table;
    static HashMap recMap;
    static int d[];
    static int include(int x,int y){
        Rectangle r1=recMap.get(x),r2=recMap.get(y);
        if(r1.a0)return d[i];
        d[i]=1;
        for(int j=1;j<=recMap.size();j++){
            if(table[i][j]>0)d[i]=Math.max(d[i],dp(j)+1);
        }
        return d[i];
    }
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        List ansList=new ArrayList();
        int num=scanner.nextInt();
        for(int q=1;q<=num;q++){
            int n=scanner.nextInt();
            recMap=new HashMap();
            for(int i=1;i<=n;i++){
                recMap.put(i, new Rectangle(scanner.nextInt(), scanner.nextInt()));
            }
            table=new int[n+1][n+1];
            for(int i=1;i<=n;i++)
                for(int j=1;j<=n;j++)
                    table[i][j]=include(i, j);
            d=new int[n+1];
            int max=0;
            for(int i=1;i<=n;i++){
                int dp=dp(i);
                if(dp>max)max=dp;
            }
            ansList.add(max);
        }
        for (Integer integer : ansList) {
            System.out.println(integer);
        }
    }
    static class Rectangle{
        public int a;
        public int b;
        public Rectangle(int a,int b) {
            this.a=a;
            this.b=b;
        }
    }
}

```

在南阳理工的OJ上已经AC,但效率不是最好,请求各位大神给予指点!
第一次发博客,代码中注释太少,以后改正!!~

你可能感兴趣的:(算法学习,动态规划)