矩阵最优路线DP

母题:矩阵中每个点有权值,每经过一个点就累加权值,求从a点到b点的最优(最大)路线。

题型1:

从左上到右下,只能向下或者向右

for 行

  for 列

    dp=max dp左,dp上;

扫一遍就行

有时可能会是bfs+记忆化搜索,仔细看题

题型2:

从左上到右上,只能向下、上、右,不能走重复的点。

这种题一定要单独求解每一列从左、上转移和从左、下转移的dp,最后求最大值(如果不单独求解,就会出现走重复点的情况,理解一下状态转移的概念就明白了)。

        for(int j=2;j<=n;j++)
            dp[j][1]+=dp[j-1][1];
        for(int j=2;j<=m;j++)
        {
            int temp[105];
            for(int i=0;i<=n+1;i++)
                temp[i]=-INF;
            for(int i=1;i<=n;i++)
                temp[i]=dp[i][j];
            for(int i=n;i>=1;i--)
                temp[i]+=Max(dp[i][j-1],temp[i+1]);
            for(int i=1;i<=n;i++)
                dp[i][j]+=Max(dp[i-1][j],dp[i][j-1]);
            for(int i=1;i<=n;i++)
                dp[i][j]=Max(dp[i][j],temp[i]);
        }

//TODO

 

posted @ 2016-10-29 17:37  Luke_Ye  阅读(831)  评论(0编辑  收藏  举报