链接:The Tower of Babylon 耗时:0.015s
这是刘汝佳的紫书中"DAG中的动态规划"中的习题,我拿它用来熟悉DAG中的动态规划。
我们不妨进行逆向考虑:现堆上面的方块,然后考虑在下面进行叠加。这样子一来,影响决策的就只是最下面方块的尺寸了。
对于这种出现了"大套小"这样的二元关系的题,我们可以将其视为一个有向无环图:其中每个节点为一个状态,状态的转移是有固定的方向的(在此题中,状态转移为从小的方块到大的方块)。
但是这道题又不同于平常的DAG动态规划:若将边长视为状态的话,则要开一个巨大的数组,这是不可以接受的。因此,我们要换一种思维方式:只记录方块的序号和摆放的方式(如现将边长从小到大进行排序,然后
继续阅读 »
链接:Link 耗时:0.028s
一道简单的动态规划,主要思路就是:
用f[i,j]表示到达(i,j)的最长路径的长度。找到每个最高点,从其开始向四周的低处搜索。如果该点已搜过并且f值大于当前长度则退出回溯。直到达到某个最低点为止。
不多说了,直接上代码:
```pascal
const
delta :array [1..4, 1..2] of integer = ((-1, 0), (1, 0), (0, 1), (0, -1)); //四个方向向量
var
_: Integer;
name: string;
n, m, i, j, x: Integer;
ans: longint
继续阅读 »
分析:如果把一个作者看作一个顶点,若两个作者合作发表过一篇论文则对应的两点有一条边相连,那么一个作者的Erdos数就是该点到Erdos点的最短距离。在此图中从Erdos点开始宽度优先遍历即可得解。不过,此题真正困难之处并不在此,more而在于如何处理输入!因为题目对于输入格式的说明含混不清,仅举了个例子,且例子也没包括一些特殊情况,所以大家就只能猜了!读者可以参考UVa BBS上的
继续阅读 »