动态规划
文章平均质量分 64
动态规划(dynamic programming)相关的icpc题目
惆怅客123
算法研究痴迷者,ai爱好者
展开
-
UVa10572 Black & White
说一个比较有意思的一个点:如果当前格涂色决策后一个连通分量消失了(注意不是和其他连通分量合并),则只能发生在当前格是最后一行倒数第一/二个格子的时候(用反正法很容易分析出此结论)。再考虑轮廓线还需要知道首格颜色,当前处理格左上格及正上格的颜色(左格颜色其实也需要知道,但是在已知首格颜色和连通分量状态的情况下可以推算出来),可以定义多维状态。你的任务是把其他格子也涂上黑色或者白色,使得任意2×2子网格不会全黑或者全白,且所有黑格四连通,所有白格也四连通。输入的第一行为数据组数T(T≤100)。原创 2024-10-14 01:07:37 · 682 阅读 · 0 评论 -
UVa1214/LA3620 Manhattan Wiring
我们可以用“每个位置是否有线”来描述一条轮廓线,但为了避免把“2 线”(连接两个2的线)和“3线”(连接两个3 的线)搞混,我们还需要给线加一个标记。这样,轮廓线上的每个位置有3 种可能:0(无线)、1(2 线)、2(3 线)。要求把这两个2和两个3各用一条折线连起来,使得总长度尽量小(线必须穿过格子的中心,每个单位正方形的边长为1)。0表示空格,1表示障碍,2表示写有“2”的格子,3表示写有“3”的格子。下图的例子,折线总长度为18(别忘了两个2和两个3所在的4个格子中各有一条长度为0.5 的线)。原创 2024-09-14 12:17:49 · 302 阅读 · 0 评论 -
UVa12164/LA4412 The Great Game
本人学习icpc算法竞赛时自己对UVa部分题目的解题思路 问题分成了两个完全独立的部分:如何最大化,以及已知p0之后如何求出状态W的首达概率。 前者解法:二分答案p,看看是否有一种策略使得pwin/(pwin+plose)≥p,即(1-p)*pwin-p*plose≥0。接下来就只需用动态规划计算(1-p)*pwin-p*plose的最大值了。令“胜”的权值为1-p,“负”的权值为-p,则问题转化为最 大化权值的数学期望。设状态d(i,j)表示前i次猜拳,得分为j(注意j可能为负数)时的最 大期望。原创 2023-05-25 22:07:24 · 103 阅读 · 0 评论 -
UVa11139 Counting Quadrilaterals
本人学习icpc算法竞赛时自己对UVa部分题目的解题思路 四边形可按凹凸分类,先考虑凹四边形,它必然是一个三角形和其内一点形成的(见下图),并且三角形内任意一点与三角形的三个顶点能组成三个凹四边形,因此统计凹四边形可以枚举格点三角形和其内格点数(具体需要用到。这种可以借助动态规划单独计算出来:设f[w][h][s]表示宽高比为w:h(w、h互质)并且横向宽度为s的斜线下方的格点计数 在图下图 的10×10 网格中,你可以看到5 个四边形 四边形的4 条边不能相交且没有三点共线原创 2023-01-11 23:11:52 · 99 阅读 · 0 评论 -
UVa10237 Bishops
本人学习icpc算法竞赛时自己对UVa部分题目的解题思路 可以定义多维递推状态:f[h1][c1][h2][c2][k](f[N][2][N][2][N]),表示阶梯最大高度为h1,最大高度的列有c1+1个(c1原创 2023-01-19 19:19:39 · 84 阅读 · 0 评论 -
UVa1341/LA3262 Different Digits
本人学习icpc算法竞赛时自己对UVa部分题目的解题思路 一种数字时的求解可以这样做:依次枚举位数x(再枚举数字d),先求出m=11...1(连续x个1)时对n的余数r(解借助欧拉降幂),如果r==0这就是答案了,不为零时++d,检查d*r%n是否为零更新答案。n为合数时,要考虑其因子情况(含2、含5、其他),因子仅包含一个2不包含5(可以包含其他质数)或者仅包含一个5不包含2时,答案仍然只包含一种数字(比如n=26时答案为222222,n=35时答案为555555),其他时候的答案最多也只包含两种数字。原创 2023-03-09 20:49:34 · 71 阅读 · 0 评论 -
UVa1297/LA2178 The Minimum Number of Rooks
本人学习icpc算法竞赛时自己对UVa部分题目的解题思路 有一个锯齿状的棋盘,其边界从上到下、从左到右形成阶梯,边界点数量不超过100,并且每一个棋盘格的行列坐标不超过100。求最小的车数量,使得每一个棋盘格均被守护到(棋盘格所在的行或者列上有车)。 解题思路参考了Fuxey的博客。 dp基于两点贪心:每一行至多一个车;可以按照行数越大的车列数也越大(即所有车呈现一个斜向右下的一个形状)的限制构造最优答案。 注意,并不是所有最优解都满足这一贪心原创 2022-10-31 01:58:25 · 96 阅读 · 0 评论 -
UVa1393/LA3720 Highways
本人学习icpc算法竞赛时自己对UVa部分题目的解题思路 有一个 n 行m 列(1≤n,m≤300)的点阵,问一共有多少条非水平非竖直的直线至少穿过其中两个点?如下图所示,n=2, m=4 时答案为12,n=m=3 时答案为14。设f[m][n]为m列n行时的答案,c[m][n]为长度为m(有m+1列)且宽度不超过n(最多n+1行)时与m互质的计数。算法时间开销已经足够小了,但其实还可以优化到。内求出,其中判断两数是否互质的方法复杂度为。由于求c[m][n]的时间复杂度为。基于c[m][n]可以写出一个。原创 2023-01-06 18:41:34 · 76 阅读 · 0 评论 -
UVa1485/LA5092 Permutation Counting
本人学习icpc算法竞赛时自己对UVa部分题目的解题思路 若排列的1号位放的数正好是1,则转化成了f[n-1][k]。接下来考虑1也参与交换对结果的变化:若1和某个ai>i的元素交换,则转化成了新的排列但计数结果仍然f[n-1][k],当ai>i的元素有k个时有k种交换选择;若1和某个ai≤i的元素交换,则新排列的1号位新增一个ai>i的元素,当ai>i的元素有k-1个时有n-k种交换选择。得出递推式:f[n][k] = f[n-1][k] + k*f[n-1][k] + (n-k)*f[n-1][k-1]原创 2023-01-31 17:07:12 · 66 阅读 · 0 评论 -
UVa1496/LA5717 Peach Blossom Spring
本人学习icpc算法竞赛时自己对UVa部分题目的解题思路 本题是2011年ACM ICPC 亚洲区域赛 北京 赛区 的E 题。有n个房子(4 ≤ n ≤ 50),前k个房子每个里面住着一户人家k (1 ≤ k ≤ 5, 2k ≤ n),末k的房子是隐蔽点。这些房子间总共有m条道路(0 ≤ m ≤ 1000),但所有道路都是损坏的,每条道路的维修费用是w(1 ≤ w ≤ 1000)。请计算最小的维修费用,使得前k户人家和最后k个避难点一一对应。经典问题:图论中的斯坦纳树。原创 2022-10-11 20:10:46 · 121 阅读 · 0 评论 -
UVa1370/LA3605 Roommate
本人学习icpc算法竞赛时自己对UVa部分题目的解题思路 本题是ICPC亚洲区域赛Seoul赛区2006年的 E 题。Ji-Sung和Young-Pyo是室友,他们共享n个不同的工具(1 ≤ n ≤ 50),他们各自对每个工具的单次使用时间(≤100的正整数)已知,并且已知他俩某天各自使用工具的序列(长度≤300),求他俩均完成使用的最早时间。朴素的想法是用d[i][j]表示已经安排Ji-Sung使用了i个工具,Young-Pyo使用了j个工具,还需要原创 2022-10-17 20:54:57 · 195 阅读 · 0 评论