求高人帮助,一道图像还原题纠结我N久了。。。
2008年5月12日14:28分。四川发生了8.0级大地震,都江堰成了重灾区,当然XX学院也成了重灾区中一所大学,很多建筑物都被严重的损坏了。地震后,我们需要来修复受损的房屋,XX学院从电脑里找出原来的设计图,现在需要你来修复...
现在给你2张平面图(最大:640X480),第一张是受损后的平面图,第二张是受损前的平面图。然后给你一些模块平面图(最大:128X128,最多128种),这些模块平面图可以使用无数次,这些图上只有0,1组成,当你覆盖上去的时候就记修复1次,我们希望用最少的修复次数去完成修复即与受损前的平面图相同。模块覆盖上去后的数字计算为xor (注:异或1 xor 1=0,0 xor 0=0,1 xor 0=1,0 xor 1=1。)值表示。如图:
注:
A:模块平面图
B:受损后的平面图
C:修复后的图
如图:
输入:给你一个N,表示有N组数据,然后每组数据:
n1,m1表示受损后的平面图的长宽。
然后n1行m1列表示受损后的平面图。
然后n1行m1列表示受损前的平面图
然后一个M,表示有M个模块平面图,然后以下是每个模块图数据:
n2,m2表示模块平面图的长宽
然后n2行m2列模块平面图。
输出:
每组数据输出一行case T: K
T表示第几组数据,K表示修复完成最少需要的修复次数(如果大家想不出来最优解,想想如果不完全恢复(恢复了大部分),最少修复次数)。
样例:
输入:
1 (表示一组数据)
3 4(修复前/后图的长宽)
0 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1
0 1 1 1
1 1 1 1
2 (模块图的数量)
2 2 (模块图1的长宽)
1 0 (模块图1的图)
0 0
3 1 (模块图2的长宽)
0 (模块图2的图)
1
1
输出:case 1:1
[解决办法]
看来是关于算法设计的,坐等人了
[解决办法]
有一点明白了,第一步找到要修补的地方,第二步模式匹配,第三步统计输出。
由
0 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1
0 1 1 1
1 1 1 1
xor 得
1 0 0 0
1 0 0 0
0 0 0 0
用模式2修复1次。
[解决办法]
第一步,简单受损前后的地图比对,xor找出要修补的地方。
这步可省略,直接给出要修补的矩阵和模式即可!
[解决办法]
样例:
输入:
1 (表示一组数据)
3 4(需修补图的长宽)
1 0 0 0
1 0 0 0
0 0 0 0
2 (模块图的数量)
2 2 (模块图1的长宽)
1 0 (模块图1的图)
0 0
3 1 (模块图2的长宽)
0 (模块图2的图)
1
1
[解决办法]
用模块1,修复2次也行,但不是最少的。
模块的一部分可以超越边界,对内部起作用,对边界外的部分不起作用。
模块尽量能在地图内部,而且是落在内部的1越多越好,1多表示修复的快,次数可以少一些。
[解决办法]
想得太简单了吧?
//模块尽量能在地图内部,而且是落在内部的1越多越好,1多表示修复的快,次数可以少一些。
这句话我觉得也很有问题啊,比如说用来修复的块是这样的。
111
111
111
111
101
111
这个他们相互之间也可以抵消的。。。感觉并没有可以直接选择最优的策略啊。。。