三角形xjoi 8.14
Posted brilliant107
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了三角形xjoi 8.14相关的知识,希望对你有一定的参考价值。
问题描述:
离圣诞节只有一个月了,家里要你准备一个很大的星星,然后把它粘在圣诞树的顶端。你已经准备好了一个三角形的银色包装纸来做星星,可忽然有一天你发现在这张大纸上被弄了好多的小洞,原来是你的弟弟妹妹已经从这张大纸上剪掉了许多小的三角形,做了很多小星星。现在,你只能将就了,看怎样才能从这残缺的大纸中,找出一块最大的完整的三角形。
如下图所示,假设给你一张大的三角形纸,里面黑的三角形是被你的弟弟妹妹剪掉了的,需要你在剩下的白色区域中找出一个最大的三角形区域。
问题求解:
你现在要找出这样一个算法,并用程序实现它。
输入格式:
输入文件包括几组关于大三角形样子的描述。输入每一组的第一行是一个整数N(1≤N≤100)表示下面要描述的大三角形的高度。接下来的N行将用许多字符模拟出大三角形的样子,其中用“X”表示被剪掉的小三角形(即上图中的黑三角形),用“O”表示 白色区域。每行字符个数从(2N-1)到1递减。如果组首为0,则表示结束。输出格式:
对于输入中的每一个三角形,输出一个数,表示剩下部分所能得到的最大的三角形的面积,而该数就是其中所包含的小三角形的个数。输出格式如样例,如第2组数据,最大面积为4,则输出:Triangle #2
The largest triangle area is 4
样例输入:
5 XOXXOOOOX OOOOOXO OOOXO OXO O 4 XOXOXOO XOOOX XXO O 0
样例输出:
Triangle #1 The largest triangle area is 9 Triangle #2 The largest triangle area is 4
数据范围:
0≤N≤100数据组数据<=100
题解:这题刚开始是真的想不到,只知道是个DP但不知道状态怎么转移,因为我想的是三角形不断变大,最上面一行的三角形就
不断增加,这要我怎么记录?
最后看了一下题解才豁然省悟,每个三角形f[i,j]只和f[i-1,j],f[i-1,j-1],f[i,j-2]有关!每个大三角形中都有许多这样的小三角形(4个组成)
dp方程就是if a[i-1,j-1]是不是白色,那么f[i,j]=min(f[i-1,j],f[i-1,j-2])+1。(最小的那个才连的起来)不需要f[i-1,j],f[i,j-2]是否是白色区域,刚开始预处理白色为1,黑色为0。因为正倒三角形都有可能,所以正反都搜一次。f[i,j]:=min(f[i+1,j],f[i+1,j+2])+1.
代码就不贴啦。
以上是关于三角形xjoi 8.14的主要内容,如果未能解决你的问题,请参考以下文章