zoukankan      html  css  js  c++  java
  • Day1

    luogu_p1514 记忆化搜索 与 贪心

    题面

    ​ 给定一个N*M的矩形,从第一行的任意多个单位格子出发,进行下降且含有公共边的染色,问是否能够将最后一行格子全部染色,若能够

    求出满足条件下的最少出发格子数,若不满足条件,输出最后一行未被染色的格子数量。

    思路:

    第一行每个格子搜索一次,并求出每个格子所能染色的**最左区间和最右区间**,而不需要求出每个格子所能染色的每一个点,
    

    因为如果能够满足题意,则每个格子染色的区间一定是连续的,否则一定不能全部染色,可用反证法证得。这里需要注意一下,求最左区间和最右区间的时候

    对于l[N][N]和r[N][N]的初始化

    ​ 至于最小格子数,可以通过贪心来求解。

    ​ 算法复杂度,染色采用记忆化,复杂度是O(N+E)。最小方案,排序是O(NlogN),遍历是O(N)。

    luogu_p1508 裸DP

    题面

    ​ n*m个小方格,每个方格有一定价值(含负值)在最后一行的中间位置下方有一个点,从该点出发,向上/左前方/右前方出发,直到到达另外一侧,求获得的最大能量。

    思路:

    ​ 读题首先容易发现存在最优子结构,以及无后效性,显然可以用DP求解。

    状态设计:dp[i][j] 表示在(i,j)位置可以获得的最大能量。

    转移方程:\dp[i][j] = max {dp[i-1][j],dp[i-1][j+1],dp[i-1][j-1]}

    最后求解 : max{dp[n][m/2+1],dp[n][m/2],dp[n][m/2+2]}

    ​ 值得注意的是:一行的中间是 m/2+1 而不是 m/2。

    luogu_p1006 DP(四维或者三维)

    题面

    ​ n*m个小方格,每个方格有一定价值(0~100),问从(1,1)到(n,n)有两条不相交的路径(除起点、终点)

    的路径价值和的最大值。每一步只能向下或者向右移动.(1,1)与(n,n)的价值为0。

    思路:

    ​ 由于每一步只能向下向右,所以两条路的最后一个不重点,一定是(n-1,m)与(n,m-1);

    状态设计:dp[i][j][k][l]表示第一条路线到达(i,j),第二条路线到达(k,l)的最大价值。

    转移方程:\dp[i][j][k][l] = max {dp[i-1][j][k-1][l],dp[i][j-1][k-1][l],dp[i-1][j][k-1][l],dp[i][j-1][k][l]}+ v[i][j]+v[k][l]

    最后求解 : max{dp[n-1][m][n][m-1],dp[n][m-1][n-1][m]}

    ​ 需要注意的是,为了保证两条路线不会重复,需要在遍历的时候保证 j 与l 不相同

    三维解法是利用dp[i][j]][p] ,其中i,j代表两个路径所在行,p代表步数,这样也就确定了点。之所以能够用这个方法

    是由于走向只能是向下或者向右,而不会出现“反复横跳”的现象。

    luogu_p1387 DP(正方形的子结构)

    题面

    ​ 在一个n*m的只包含0和1的矩阵里找出一个不包含0的最大正方形,输出边长。

    思路:

    ​ 状态设计:dp[i][j]表示最大以(i,j)为左定点的正方形边长。

    ​ **转移方程:if (v[i][j] == 1) dp[i][j] = min{dp[i+1][j],dp[i][j+1],dp[i+1][j+1]}+1 **

    正方形的DP思路其实是挺有意思的。

  • 相关阅读:
    分布式哈希和一致性哈希算法
    消息队列rabbitmq的五种工作模式(go语言版本)
    Mysql查询缓存
    数据库的三大设计范式
    二叉树的常见算法
    消息队列选型分析
    Mysql防止索引失效原则
    Mysql索引优化单表、两表、三表实践
    数据结构 【栈与队列】
    谷歌实用插件
  • 原文地址:https://www.cnblogs.com/backkom-buaa/p/11450411.html
Copyright © 2011-2022 走看看