题目链接:P2703 [NOI2006] 千年虫 - 洛谷。
本题使用奇妙性质优化 DP。
题目描述
千年虫是远古时代的生物,时隔几千万年,千年虫早已从地球上销声匿迹,人们对其知之甚少。考古生物学家最近开始对其有了兴趣,因为一批珍贵的千年虫化石被发现,这些化石保留了千年虫近乎完整的形态。
理论科学家们根据这些化石归纳出了千年虫的一般形态特征模型,并且据此判定出千年虫就是蜈蚣的祖先!但科学家 J 发现了实际与理论的一些出入,他仔细的研究了上百个千年虫化石,发现其中大部分千年虫的形态都不完全符合理论模型,这到底是什么因素造成的呢?理论科学家 K 敏锐的指出,千年虫的形态保存在化石中很有可能发生各种变化,即便最细微的变化也能导致它不符合模型。
于是,摆在科学家面前的新问题诞生了:判断一个化石中的千年虫与理论模型的差距有多大?具体来说,就是根据一个千年虫化石的形态
-
头,尾用一对平行线段表示。称平行于头、尾的方向为
方向;垂直于 的方向为 方向; -
在头尾之间有两条互不相交的折线段相连,他们与头、尾两条线段一起围成的区域称为躯干,两条折线段都满足以下条件:拐角均为钝角或者平角,且包含奇数条线段,从上往下数的奇数条垂直于
方向。 -
每条折线段从上往下数的第偶数条线段的躯干的另一侧长出一条足,即一个上、下底平行于
方向的梯形或矩形,且其中远离躯干一侧的边垂直于 方向。
注意:足不能退化成三角形(即底边的长度均大于零),躯干两侧足的数目可以不一样。(如上图,左边有
可见,
由于岁月的侵蚀,在实际发现的化石中,千年虫的形状并不满足上面理论模型的规则,一些格子中的躯体已经被某些矿物质溶解腐蚀了。地质、物理、生物学家共同研究得出:
-
腐蚀是以格子为单位的,只能一整格被腐蚀;
-
腐蚀是分步进行的,每一步只有一格被腐蚀;
-
如果去掉一个格子后躯体不连通了,那么这个格子当前不会被腐蚀;
-
如果一个格子的左边邻格和右边邻格都还没被腐蚀,那么这个格子当前不会被腐蚀;
-
与头相邻的格子不能全部被腐蚀,与尾相邻的格子不能全部被腐蚀。
倘若满足上面五条,我们仍然可以用
例如下图:
现在你的任务是,输入一个化石里的千年虫的描述
输入格式
第一行为一个整数
以下
输出格式
仅一行,为一个整数,表示最少代价。
输入输出样例 #1
输入 #1
1 |
|
输出 #1
1 |
|
说明/提示
【样例说明】
如图:
【评分方法】
本题没有部分分,你的程序的输出只有和我们的答案完全一致才能获得满分,否则不得分。
【数据范围】
对于
对于
对于
对于
题解
问题转化
显然本题左右两侧的处理是相互独立的,我们以右侧处理为例。
转话题意如下。对于右侧的数列:
1 |
|
如上图所示,修改
动态规划
用数列
定义
该算法复杂度为
决策优化
注意到状态转移的最优决策
使用该性质即可在有限的
注意本题二维数组可能超过内存限制,可使用滚动数组减少空间开销。