zoukankan      html  css  js  c++  java
  • 2020.08.16 周作业简要题解

    [huge ext{UVA1629} ]

    题意

    给定 (n imes m) 的矩形,每个格子是 (0)(1)。要求沿格线切割,求最小的切线长,使得切割后的每一块恰好有一个 (1)。切割的起点和重点不必是矩形边缘。

    (n,m leq 20)

    题解

    (dp_{lx,ly,rx,ry}) 表示左上角为 ((lx,ly)),右下角为 ((rx,ry)) 的矩形中满足条件需要切割多少次。记忆化搜索,每次枚举将该矩形切成两块的线。

    [huge ext{UVA10118} ]

    题意

    (4) 堆糖,每堆 (n) 颗,每颗糖有颜色,每次可以将某一堆糖的顶端取掉一颗,然后放在篮子里,但篮子里的糖数不能超过 (5)。如果篮子里有两颗一样颜色的糖,那么可以拿走它们。问最多可以拿多少糖。

    (n leq 40)

    题解

    显然可以暴力 dp,(dp_{a,b,c,d}) 表示四堆糖还剩这么多的时候可以拿多少对。观察到 (a,b,c,d) 确定则篮子里的糖状态唯一,所以不必将篮子里的糖的状态表示在 dp 状态里。

    [huge ext{UVA1025} ]

    题意

    (n) 个车站和一些线路,某些线路从某个时刻出发向右开,某些则向左。列车运行速度相同,(i,i+1) 两站距离为 (t_i)。问 (0) 时刻在车站 (1)(T) 时刻到达车站 (n) 所需要的最小等车时间(同站换乘等待时间)。

    • (n leq 50)
    • (T leq 200)

    题解

    (dp_{t,i}) 表示时刻 (t) 在车站 (i) 最小的等待时间,转移即可,转移方程显然。需要辅助数组保存时刻 (t) 在车站 (i) 是否有往左 / 右开的车,降低转移时间复杂度。

    [huge ext{UVA437} ]

    题意

    给定 (n) 种长方体,第 (i) 种长宽高分别为 (x_i,y_i,z_i),每种都有无数个。你可以选择旋转长方体,使其底面变化。

    当长方体 (i) 底面的长宽严格小于 (j) 底面长宽时,(i) 可以放在 (j) 上。求可以达到的最大高度。

    (n leq 30)

    题解

    根据题意将一种长方体拆成三个((x_i imes y_i,y_i imes z_i,x_i imes z_i) 为底面),然后枚举建边,观察到得到的是 DAG,DAG 上 DP 即可。

    [huge ext{UVA116} ]

    题意

    给定 (m imes n) 的整数矩阵,从第一列任意位置出发,每次可以向右上,右,右下走一步。求到达最后一列时,经过的权值和的最大值。如果当前在第 (1) 行,往右上走到达下一列第 (n) 行。如果当前在第 (n) 行,往右下走到达下一列第 (1) 行。

    (m leq 10,n leq 10)

    题解

    根据题意建立状态 (dp_{i,j}) 表示在第 (i) 列第 (j) 行时的最大权值,DP 即可。

    [huge ext{UVA12563} ]

    题意

    在 KTV 里,给定 (n) 首歌的长度,分别为 (a_1,a_2,...,a_n) 秒,和能够使用 KTV 的时间 (t)。在使用时间结束时,如果有没有唱完的歌,那么 KTV 会等你唱完这首歌。你需要选择一些歌来唱,但必须在离开前唱一首 (678) 秒的《劲歌金曲》。问最多能唱多少首歌,在此前提下最晚可以多久离开 KTV。

    (n leq 50,t leq 10^9,sum a_i + 678 > t,a_i leq 180)

    题解

    在结束前一秒开始唱《劲歌金曲》。剩下的 (t-1) 秒 DP 即可,01 背包模型。

    [huge ext{POJ1836} ]

    题意

    给定 (n) 个正实数 (a_1,a_2,...,a_n)。求至少需要删除几个,这样剩下的 (a_i) 满足以下条件:

    • (m) 表示删除后剩余的数量,则 (a_1 < a_2 < ... < a_i)(a_i > a_{i+1} > ... > a_m)

    题解

    (dp_{i,0/1}) 表示 ([1,i]) 组成的最长上升子序列 / ([i,n]) 组成的最长下降子序列。

    分类讨论:

    • (a_1<a_2<...<a_k>a_{k+1}>...>a_m):答案为 (maxlimits_{1 leq i leq n}{dp_{i,0}+dp_{i,1}-1})
    • (a_1<a_2<...<a_k=a_{k+1}>...>a_m):答案为 (maxlimits_{1 leq i eq j leq n}{dp_{i,0}+dp_{j,1}})

    [huge ext{POJ1458} ]

    题意

    (S)(T) 的最长公共子序列。

    (|S|,|T| leq 5cdot 10^3)

    题解

    DP 经典模型,设 (dp_{i,j}) 表示 (S)(i)(T)(j) 位组成的最长公共子序列,则:

    • (S_i eq T_j)(dp_{i,j} = max{dp_{i-1,j},dp_{i,j-1}})
    • (S_i = T_j)(dp_{i,j} = dp_{i-1,j-1} + 1)

    [huge ext{POJ1651} ]

    题意

    给定长度为 (n) 的数列 (a_1,a_2,...,a_n)。删除 (a_i(1<i<n)) 的代价是 (a_{i-1} imes a_{i} imes a_{i+1})。求数列只剩下两个数时,最小的代价是多少。

    (n leq 100,1 leq a_i leq 100)

    题解

    区间 DP。定义 (dp_{i,j}) 表示删除区间 ([i,j]) 的最小代价。枚举区间中最后一个删除的数转移即可。

    [huge ext{HDU1231} ]

    题意

    求数列的最大子段和。

    题解

    [huge ext{UVA11584} ]

    题意

    给定字符串 (s),将其划分成若干个回文串,要求划分的个数最小。

    (1 leq |s| leq 1000)

    题解

    可以 (O(n^2)) 区间 DP 求出区间 ([l,r]) 是否是回文串。设 (dp_{i}) 表示前 (i) 个字符的划分结果,转移即可。

    [huge ext{UVA1626} ]

    题意

    给定含有 ((,),[,]) 的括号序列 (s),求出一个最短的合法括号序列 (t),使得 (s)(t) 的子序列。

    (|s| leq 100)

    题解

    考虑递归求解。

    • 如果序列为空,停止递归。
    • 如果序列长度为 (1),将这一对括号补全。
    • 如果两侧的括号匹配,那么不需要添加括号,将两侧的括号删除后递归。
    • 否则,找到一个最优的中点,将当前序列以中点分成两部分分别递归。最优的中点可以通过简单的区间 DP 求出。
  • 相关阅读:
    总结
    kafka
    kafka前传 JMS
    currentHashMap
    mapPartitionsWithIndex foreachPartitionAsync foreachPartition
    hbase
    hive
    zookeeper kafka storm
    flume的简单使用
    spring-data-jpa
  • 原文地址:https://www.cnblogs.com/liuzongxin/p/13510602.html
Copyright © 2011-2022 走看看