码迷,mamicode.com
首页 > 其他好文 > 详细

luogu p1004

时间:2018-08-12 23:40:49      阅读:206      评论:0      收藏:0      [点我收藏+]

标签:max   规划   pre   ++   path   最大   题意   ==   控制   

P1004

题意

  • 类似一个比较小的方格(N<=9),有的点是0,有的点有数, A->B的路径经过的点加上该点代表的数,求两次A->B的最大解(最优解)
  • 一个令人恼的问题是两条路径如果有重合点,那么势必回算两次,所以是不合题意的。而先得一次的最大解,并不一定是两次的最优解
  • 这里可以控制两条路径dp[i][j][k][l],(i,j),(k,l)是两条路径,然后可以动态规划做(如何处理重复经过的点呢,可以想一想!!)
  • 据说有些大佬可以用dfs和网络流做
  • dp可以优化到O(n^2) 不过自己还没掌握

    代码

int maxPath(){
    for(int i=1;i<=N;i++){
        for(int j=1;j<=N;j++){
            for(int k=1;k<=N;k++){
                for(int l=1;l<=N;l++){
                    dp[i][j][k][l]=std::max(std::max(dp[i-1][j][k-1][l],dp[i-1][j][k][l-1]),std::max(dp[i][j-1][k-1][l],dp[i][j-1][k][l-1]))+mp[i][j]+mp[k][l];
                    if(i==k&&j==l) dp[i][j][k][l]-=mp[i][j];
                }
            }
        }
    }
    return dp[N][N][N][N];
}

luogu p1004

标签:max   规划   pre   ++   path   最大   题意   ==   控制   

原文地址:https://www.cnblogs.com/fridayfang/p/9465326.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!