4950: [Wf2017]Mission Improbable
Time Limit: 1 Sec Memory Limit: 1024 MB
题目

大概意思就是有一堆箱子,在保持最终三视图不变的情况下,求出最多能移走多少个箱子
Input
第一行包含两个整数r(1≤r≤100)和c(1≤n≤100),分别表示网格的行数与列数。
接下来r行,每行包含c个整数,表示对应行上每堆立方体箱的高度(箱子的数量)。
所有的高度在0到10^9之间 (含边界) 。
Output
输出在不被发现的情况下最多能偷走多少箱子。
Sample Input
1.in
5 5
1 4 0 5 2
2 1 2 0 1
0 2 3 4 4
0 3 0 3 1
1 2 2 1 1
2.in
2 3
50 20 3
20 10 3
Sample Output
1.out
9
2.out
30
思路
以2.in为例
1、首先,把所有箱子都移走。
0 0 0
0 0 0
2、对于俯视图,我们要保证有箱子的地方不能为空,因此在不为空的位置,都放上一个箱子
1 1 1
1 1 1
3、把行和列的最大值位置箱子放上去
50 20 3
20 1 1
4、遍历箱子,如果当前位置不为空,并且这个位置对应行和列的高度相同,说明放这个位置可以同时满足行和列的需求,只要放一次就行了,相当于3多放了一次,我们要尽可能地去重复,利用匈牙利算法去重,让横纵轴最多匹配一次。
50 1 3
1 20 1
5、对去重之后还剩下的重复点,把对应的箱子数加回来
Python代码
1 | # -*- coding:utf-8 -*- |