avatar
t*t
1
N x N integer矩阵。
每一行取一个数, 且取出的每一个数必须不同列。取出N个数使得其sum最小.
求取法。
感觉应该可以用DP做?
avatar
w*x
2

瞬间想到了8皇后

【在 t**********t 的大作中提到】
: N x N integer矩阵。
: 每一行取一个数, 且取出的每一个数必须不同列。取出N个数使得其sum最小.
: 求取法。
: 感觉应该可以用DP做?

avatar
b*d
3

my first thought is probing and pruning, maybe too slow.

【在 t**********t 的大作中提到】
: N x N integer矩阵。
: 每一行取一个数, 且取出的每一个数必须不同列。取出N个数使得其sum最小.
: 求取法。
: 感觉应该可以用DP做?

avatar
t*t
4
care to elaborate?
n! complexity?

【在 b*******d 的大作中提到】
:
: my first thought is probing and pruning, maybe too slow.

avatar
p*2
5
不就是0-n-1的排列吗?
avatar
i*h
6
什么叫0-n-1的排列?

【在 p*****2 的大作中提到】
: 不就是0-n-1的排列吗?
avatar
p*2
7

0 1 2
0 2 1
1 0 2
1 2 0
2 0 1
2 1 0
就这么几种情况吧?

【在 i***h 的大作中提到】
: 什么叫0-n-1的排列?
avatar
t*t
8
u mean n! complexity?
too slow bah

【在 p*****2 的大作中提到】
:
: 0 1 2
: 0 2 1
: 1 0 2
: 1 2 0
: 2 0 1
: 2 1 0
: 就这么几种情况吧?

avatar
b*d
9

解空间是N!,但很多可以prune掉,因为当前valid 的m个列或行填充后,其sum可能已
经大于当前最小值了,就不必继续probe了,就可以递归进行下一选择了。
不好的是这个方法在worst case(min sum是N!个解的“最后”一个),进行了没有或
很少的prune,可能有些large test不过。

【在 t**********t 的大作中提到】
: care to elaborate?
: n! complexity?

avatar
w*x
10
一维数组record, 递归得了
avatar
i*h
11
如果有负数呢?

【在 b*******d 的大作中提到】
:
: 解空间是N!,但很多可以prune掉,因为当前valid 的m个列或行填充后,其sum可能已
: 经大于当前最小值了,就不必继续probe了,就可以递归进行下一选择了。
: 不好的是这个方法在worst case(min sum是N!个解的“最后”一个),进行了没有或
: 很少的prune,可能有些large test不过。

avatar
p*2
12

面试题需要什么过larget test呢?

【在 b*******d 的大作中提到】
:
: 解空间是N!,但很多可以prune掉,因为当前valid 的m个列或行填充后,其sum可能已
: 经大于当前最小值了,就不必继续probe了,就可以递归进行下一选择了。
: 不好的是这个方法在worst case(min sum是N!个解的“最后”一个),进行了没有或
: 很少的prune,可能有些large test不过。

avatar
i*h
13
考试只能用递归了

【在 w****x 的大作中提到】
: 一维数组record, 递归得了
avatar
p*2
14

有啥slow的?面试题这样的多了。

【在 t**********t 的大作中提到】
: u mean n! complexity?
: too slow bah

avatar
p*2
15

可以先sort

【在 i***h 的大作中提到】
: 如果有负数呢?
avatar
i*7
16
本来在想greedy的,不过后来觉得好像还是只能类似八皇后的permutation
avatar
i*h
17
???
sort啥? 矩阵是不能动的

【在 p*****2 的大作中提到】
:
: 可以先sort

avatar
p*2
18

不好意思。说错了。

【在 i***h 的大作中提到】
: ???
: sort啥? 矩阵是不能动的

avatar
i*h
19
估计就是考写递归的

【在 i*********7 的大作中提到】
: 本来在想greedy的,不过后来觉得好像还是只能类似八皇后的permutation
avatar
e*l
20
第一行的N个元素,分别对应N个(N-1)x(N-1)的余子阵(即去掉这个元素所在的行和列
之后剩下的矩阵)。假设N个余子阵上该问题的最优解已经得到(递归),就可以通过
比较第一行元素的N种选择,来得到NxN上的最优解。
avatar
w*x
21

我觉得你瞒强的

【在 i*********7 的大作中提到】
: 本来在想greedy的,不过后来觉得好像还是只能类似八皇后的permutation
avatar
b*d
22

这仍是N!,和那个8后一维数组permute是一样的。

【在 e***l 的大作中提到】
: 第一行的N个元素,分别对应N个(N-1)x(N-1)的余子阵(即去掉这个元素所在的行和列
: 之后剩下的矩阵)。假设N个余子阵上该问题的最优解已经得到(递归),就可以通过
: 比较第一行元素的N种选择,来得到NxN上的最优解。

avatar
f*e
23
先用LP表示:
min sum_(ij)(w_ij*x_ij)
s.t. sum_i(x_ij)=1, sum_j(x_ij)=1, 0<=x_ij<=1
然后看能否转成combinatorial的问题。
minimum cost flow(algorithm design上有详细介绍)。
想到了,每行对应一个源s_i,每列对应一个汇t_j,
每个数组元素w_ij看成是一个node,与源s_i,汇t_j相连,
N个源s_i与总源s相连,N个汇t_j与总汇t相连,
边的cost是w_ij/2,capacity是1,其他边cost=0。

【在 t**********t 的大作中提到】
: N x N integer矩阵。
: 每一行取一个数, 且取出的每一个数必须不同列。取出N个数使得其sum最小.
: 求取法。
: 感觉应该可以用DP做?

avatar
e*l
24
对。

【在 b*******d 的大作中提到】
:
: 这仍是N!,和那个8后一维数组permute是一样的。

avatar
b*d
25

强。

【在 f*****e 的大作中提到】
: 先用LP表示:
: min sum_(ij)(w_ij*x_ij)
: s.t. sum_i(x_ij)=1, sum_j(x_ij)=1, 0<=x_ij<=1
: 然后看能否转成combinatorial的问题。
: minimum cost flow(algorithm design上有详细介绍)。
: 想到了,每行对应一个源s_i,每列对应一个汇t_j,
: 每个数组元素w_ij看成是一个node,与源s_i,汇t_j相连,
: N个源s_i与总源s相连,N个汇t_j与总汇t相连,
: 边的cost是w_ij/2,capacity是1,其他边cost=0。

avatar
e*l
26
Interesting。
把x_ij松弛了之后,能得到一个数值解,在离散化吗?能保证全局最优吗?

【在 f*****e 的大作中提到】
: 先用LP表示:
: min sum_(ij)(w_ij*x_ij)
: s.t. sum_i(x_ij)=1, sum_j(x_ij)=1, 0<=x_ij<=1
: 然后看能否转成combinatorial的问题。
: minimum cost flow(algorithm design上有详细介绍)。
: 想到了,每行对应一个源s_i,每列对应一个汇t_j,
: 每个数组元素w_ij看成是一个node,与源s_i,汇t_j相连,
: N个源s_i与总源s相连,N个汇t_j与总汇t相连,
: 边的cost是w_ij/2,capacity是1,其他边cost=0。

avatar
f*e
27
LP是凸优化,所以解是最优的。
LP描述了空间一个凸多面体,一般LP的解就是多面体的顶点,顶点坐标一般不是整数。但
我以前学combinatorial optimization的时候,说如果LP的系数矩阵A如果满足某个条件
的时候,多面体的顶点坐标就是整数了,我猜这道题就是。

【在 e***l 的大作中提到】
: Interesting。
: 把x_ij松弛了之后,能得到一个数值解,在离散化吗?能保证全局最优吗?

avatar
x*o
28
求大牛鉴定,这个也N!吗?
public int findMin(int[][] a)
{
if (a == null || a.length == 0)
{
return 0;
}
if (a.length == 1)
{
return a[0][0];
}
int n = a[0].length;
ArrayList avail = new ArrayList();
for (int i = 0; i < n; i++)
{
avail.add(i);
}
return find(a, 0, avail);
}
private int find(int[][] a, int curRow, ArrayList availCols)
{
if (availCols.size() == 1)
{
return a[curRow][availCols.get(0)];
}
else
{
int min = Integer.MAX_VALUE;
for (int i : availCols)
{
int cur = a[curRow][i];
ArrayList rest = (ArrayList) availCols.
clone();
rest.remove(rest.indexOf(i));
int min_s = cur + find(a, curRow + 1, rest);
if (min_s < min)
{
min = min_s;
}
}
return min;
}
}
avatar
x*o
29
嘿嘿,貌似是哦~!能再快吗?求大牛指导

【在 x*****o 的大作中提到】
: 求大牛鉴定,这个也N!吗?
: public int findMin(int[][] a)
: {
: if (a == null || a.length == 0)
: {
: return 0;
: }
: if (a.length == 1)
: {
: return a[0][0];

avatar
w*g
30
一种取法, 还是所有种类?
avatar
v*c
31
矩阵看成是一个bipartite graph的adjacency matrix.
行是一边的顶点,列是另外一边的顶点
这个问题相当于min weight matching in bipartite graph
Hungarian method O(n^3)时间可解

【在 t**********t 的大作中提到】
: N x N integer矩阵。
: 每一行取一个数, 且取出的每一个数必须不同列。取出N个数使得其sum最小.
: 求取法。
: 感觉应该可以用DP做?

avatar
t*t
32
N x N integer矩阵。
每一行取一个数, 且取出的每一个数必须不同列。取出N个数使得其sum最小.
求取法。
感觉应该可以用DP做?
avatar
w*x
33

瞬间想到了8皇后

【在 t**********t 的大作中提到】
: N x N integer矩阵。
: 每一行取一个数, 且取出的每一个数必须不同列。取出N个数使得其sum最小.
: 求取法。
: 感觉应该可以用DP做?

avatar
b*d
34

my first thought is probing and pruning, maybe too slow.

【在 t**********t 的大作中提到】
: N x N integer矩阵。
: 每一行取一个数, 且取出的每一个数必须不同列。取出N个数使得其sum最小.
: 求取法。
: 感觉应该可以用DP做?

avatar
t*t
35
care to elaborate?
n! complexity?

【在 b*******d 的大作中提到】
:
: my first thought is probing and pruning, maybe too slow.

avatar
p*2
36
不就是0-n-1的排列吗?
avatar
i*h
37
什么叫0-n-1的排列?

【在 p*****2 的大作中提到】
: 不就是0-n-1的排列吗?
avatar
p*2
38

0 1 2
0 2 1
1 0 2
1 2 0
2 0 1
2 1 0
就这么几种情况吧?

【在 i***h 的大作中提到】
: 什么叫0-n-1的排列?
avatar
t*t
39
u mean n! complexity?
too slow bah

【在 p*****2 的大作中提到】
:
: 0 1 2
: 0 2 1
: 1 0 2
: 1 2 0
: 2 0 1
: 2 1 0
: 就这么几种情况吧?

avatar
b*d
40

解空间是N!,但很多可以prune掉,因为当前valid 的m个列或行填充后,其sum可能已
经大于当前最小值了,就不必继续probe了,就可以递归进行下一选择了。
不好的是这个方法在worst case(min sum是N!个解的“最后”一个),进行了没有或
很少的prune,可能有些large test不过。

【在 t**********t 的大作中提到】
: care to elaborate?
: n! complexity?

avatar
w*x
41
一维数组record, 递归得了
avatar
i*h
42
如果有负数呢?

【在 b*******d 的大作中提到】
:
: 解空间是N!,但很多可以prune掉,因为当前valid 的m个列或行填充后,其sum可能已
: 经大于当前最小值了,就不必继续probe了,就可以递归进行下一选择了。
: 不好的是这个方法在worst case(min sum是N!个解的“最后”一个),进行了没有或
: 很少的prune,可能有些large test不过。

avatar
p*2
43

面试题需要什么过larget test呢?

【在 b*******d 的大作中提到】
:
: 解空间是N!,但很多可以prune掉,因为当前valid 的m个列或行填充后,其sum可能已
: 经大于当前最小值了,就不必继续probe了,就可以递归进行下一选择了。
: 不好的是这个方法在worst case(min sum是N!个解的“最后”一个),进行了没有或
: 很少的prune,可能有些large test不过。

avatar
i*h
44
考试只能用递归了

【在 w****x 的大作中提到】
: 一维数组record, 递归得了
avatar
p*2
45

有啥slow的?面试题这样的多了。

【在 t**********t 的大作中提到】
: u mean n! complexity?
: too slow bah

avatar
p*2
46

可以先sort

【在 i***h 的大作中提到】
: 如果有负数呢?
avatar
i*7
47
本来在想greedy的,不过后来觉得好像还是只能类似八皇后的permutation
avatar
i*h
48
???
sort啥? 矩阵是不能动的

【在 p*****2 的大作中提到】
:
: 可以先sort

avatar
p*2
49

不好意思。说错了。

【在 i***h 的大作中提到】
: ???
: sort啥? 矩阵是不能动的

avatar
i*h
50
估计就是考写递归的

【在 i*********7 的大作中提到】
: 本来在想greedy的,不过后来觉得好像还是只能类似八皇后的permutation
avatar
e*l
51
第一行的N个元素,分别对应N个(N-1)x(N-1)的余子阵(即去掉这个元素所在的行和列
之后剩下的矩阵)。假设N个余子阵上该问题的最优解已经得到(递归),就可以通过
比较第一行元素的N种选择,来得到NxN上的最优解。
avatar
w*x
52

我觉得你瞒强的

【在 i*********7 的大作中提到】
: 本来在想greedy的,不过后来觉得好像还是只能类似八皇后的permutation
avatar
b*d
53

这仍是N!,和那个8后一维数组permute是一样的。

【在 e***l 的大作中提到】
: 第一行的N个元素,分别对应N个(N-1)x(N-1)的余子阵(即去掉这个元素所在的行和列
: 之后剩下的矩阵)。假设N个余子阵上该问题的最优解已经得到(递归),就可以通过
: 比较第一行元素的N种选择,来得到NxN上的最优解。

avatar
f*e
54
先用LP表示:
min sum_(ij)(w_ij*x_ij)
s.t. sum_i(x_ij)=1, sum_j(x_ij)=1, 0<=x_ij<=1
然后看能否转成combinatorial的问题。
minimum cost flow(algorithm design上有详细介绍)。
想到了,每行对应一个源s_i,每列对应一个汇t_j,
每个数组元素w_ij看成是一个node,与源s_i,汇t_j相连,
N个源s_i与总源s相连,N个汇t_j与总汇t相连,
边的cost是w_ij/2,capacity是1,其他边cost=0。

【在 t**********t 的大作中提到】
: N x N integer矩阵。
: 每一行取一个数, 且取出的每一个数必须不同列。取出N个数使得其sum最小.
: 求取法。
: 感觉应该可以用DP做?

avatar
e*l
55
对。

【在 b*******d 的大作中提到】
:
: 这仍是N!,和那个8后一维数组permute是一样的。

avatar
b*d
56

强。

【在 f*****e 的大作中提到】
: 先用LP表示:
: min sum_(ij)(w_ij*x_ij)
: s.t. sum_i(x_ij)=1, sum_j(x_ij)=1, 0<=x_ij<=1
: 然后看能否转成combinatorial的问题。
: minimum cost flow(algorithm design上有详细介绍)。
: 想到了,每行对应一个源s_i,每列对应一个汇t_j,
: 每个数组元素w_ij看成是一个node,与源s_i,汇t_j相连,
: N个源s_i与总源s相连,N个汇t_j与总汇t相连,
: 边的cost是w_ij/2,capacity是1,其他边cost=0。

avatar
e*l
57
Interesting。
把x_ij松弛了之后,能得到一个数值解,在离散化吗?能保证全局最优吗?

【在 f*****e 的大作中提到】
: 先用LP表示:
: min sum_(ij)(w_ij*x_ij)
: s.t. sum_i(x_ij)=1, sum_j(x_ij)=1, 0<=x_ij<=1
: 然后看能否转成combinatorial的问题。
: minimum cost flow(algorithm design上有详细介绍)。
: 想到了,每行对应一个源s_i,每列对应一个汇t_j,
: 每个数组元素w_ij看成是一个node,与源s_i,汇t_j相连,
: N个源s_i与总源s相连,N个汇t_j与总汇t相连,
: 边的cost是w_ij/2,capacity是1,其他边cost=0。

avatar
f*e
58
LP是凸优化,所以解是最优的。
LP描述了空间一个凸多面体,一般LP的解就是多面体的顶点,顶点坐标一般不是整数。但
我以前学combinatorial optimization的时候,说如果LP的系数矩阵A如果满足某个条件
的时候,多面体的顶点坐标就是整数了,我猜这道题就是。

【在 e***l 的大作中提到】
: Interesting。
: 把x_ij松弛了之后,能得到一个数值解,在离散化吗?能保证全局最优吗?

avatar
x*o
59
求大牛鉴定,这个也N!吗?
public int findMin(int[][] a)
{
if (a == null || a.length == 0)
{
return 0;
}
if (a.length == 1)
{
return a[0][0];
}
int n = a[0].length;
ArrayList avail = new ArrayList();
for (int i = 0; i < n; i++)
{
avail.add(i);
}
return find(a, 0, avail);
}
private int find(int[][] a, int curRow, ArrayList availCols)
{
if (availCols.size() == 1)
{
return a[curRow][availCols.get(0)];
}
else
{
int min = Integer.MAX_VALUE;
for (int i : availCols)
{
int cur = a[curRow][i];
ArrayList rest = (ArrayList) availCols.
clone();
rest.remove(rest.indexOf(i));
int min_s = cur + find(a, curRow + 1, rest);
if (min_s < min)
{
min = min_s;
}
}
return min;
}
}
avatar
x*o
60
嘿嘿,貌似是哦~!能再快吗?求大牛指导

【在 x*****o 的大作中提到】
: 求大牛鉴定,这个也N!吗?
: public int findMin(int[][] a)
: {
: if (a == null || a.length == 0)
: {
: return 0;
: }
: if (a.length == 1)
: {
: return a[0][0];

avatar
w*g
61
一种取法, 还是所有种类?
avatar
v*c
62
矩阵看成是一个bipartite graph的adjacency matrix.
行是一边的顶点,列是另外一边的顶点
这个问题相当于min weight matching in bipartite graph
Hungarian method O(n^3)时间可解

【在 t**********t 的大作中提到】
: N x N integer矩阵。
: 每一行取一个数, 且取出的每一个数必须不同列。取出N个数使得其sum最小.
: 求取法。
: 感觉应该可以用DP做?

avatar
Y*f
63
这道题是不是可以这样做:
1. 初始化选定N个元素A[0][0], A[1][1], A[2][2] .....
2. 对任意两个已经选定的元素A[i][j], A[k][m], 如果A[i][j] + A[k][m] > A[i][m]
+ A[k][j], 则从选定的N个元素里面删除A[i][j], A[k][m], 添加A[i][m], A[k][j]
, 重复这一步知道不存在前续条件的一对元素。
这样得到的应该是最优的,收敛已经改也比较快。

【在 t**********t 的大作中提到】
: N x N integer矩阵。
: 每一行取一个数, 且取出的每一个数必须不同列。取出N个数使得其sum最小.
: 求取法。
: 感觉应该可以用DP做?

avatar
Y*Y
64
这个想法不错,但不能保证收敛到最优解:
比如这个:初始是{1, 1, 1},对任何两个都是最优,所以无法达到{0, 0, 0}
1 1000 0
0 1 1000
1000 0 1

m]

【在 Y********f 的大作中提到】
: 这道题是不是可以这样做:
: 1. 初始化选定N个元素A[0][0], A[1][1], A[2][2] .....
: 2. 对任意两个已经选定的元素A[i][j], A[k][m], 如果A[i][j] + A[k][m] > A[i][m]
: + A[k][j], 则从选定的N个元素里面删除A[i][j], A[k][m], 添加A[i][m], A[k][j]
: , 重复这一步知道不存在前续条件的一对元素。
: 这样得到的应该是最优的,收敛已经改也比较快。

avatar
x*0
65
mark
avatar
m*g
66
This is a NP problem.
avatar
w*p
67
me too
考到这题我就默默转身,
顺手拿两块糕点。

【在 w****x 的大作中提到】
:
: 我觉得你瞒强的

avatar
c*t
68
俺说个naive的办法,大牛看行不,开新的二维数组,对每一行排序并保留原column
index ( ValueIndex[N][N])
时间(N*N*logN),空间(N*N)
取第一列值,index没冲突的sum, 有冲突的比较一下与第二列的差值,差值最大的留下
,继续第二列。假设每次都有一半冲突 时间(n/2+n/4+。。。)=N, 空间 N
最终时间 O(N*N*logN),空间O(N*N)
可以吗?

【在 t**********t 的大作中提到】
: N x N integer矩阵。
: 每一行取一个数, 且取出的每一个数必须不同列。取出N个数使得其sum最小.
: 求取法。
: 感觉应该可以用DP做?

avatar
m*s
69
为什么G开始出网络流/匹配的题目了。。。水题全被废了么?

【在 t**********t 的大作中提到】
: N x N integer矩阵。
: 每一行取一个数, 且取出的每一个数必须不同列。取出N个数使得其sum最小.
: 求取法。
: 感觉应该可以用DP做?

avatar
s*1
70
似乎不行
1 2. 5
1. 3. 100
1. 200. 4
最小为7, 这个算法为9

【在 c********t 的大作中提到】
: 俺说个naive的办法,大牛看行不,开新的二维数组,对每一行排序并保留原column
: index ( ValueIndex[N][N])
: 时间(N*N*logN),空间(N*N)
: 取第一列值,index没冲突的sum, 有冲突的比较一下与第二列的差值,差值最大的留下
: ,继续第二列。假设每次都有一半冲突 时间(n/2+n/4+。。。)=N, 空间 N
: 最终时间 O(N*N*logN),空间O(N*N)
: 可以吗?

avatar
l*8
71
正解!

【在 v****c 的大作中提到】
: 矩阵看成是一个bipartite graph的adjacency matrix.
: 行是一边的顶点,列是另外一边的顶点
: 这个问题相当于min weight matching in bipartite graph
: Hungarian method O(n^3)时间可解

avatar
Y*y
72
这个就是经典的one to one assignment problem吧。
avatar
l*b
73
对啊, 好像就是前阵hackercup闹得那个hungarian method
G家题目真难呀,不会做...
avatar
p*2
74

不知道面试官是不是真的要考匈牙利算法。那样的话估计只有han6这样的大牛才能通过
了。而且不是n^3的算法说是不太好写吗?n^4的可能容易些。

【在 l*******b 的大作中提到】
: 对啊, 好像就是前阵hackercup闹得那个hungarian method
: G家题目真难呀,不会做...

avatar
d*x
75
二分图最大匹配?
用naive的网络流算法也不会到n^4吧。。

【在 p*****2 的大作中提到】
:
: 不知道面试官是不是真的要考匈牙利算法。那样的话估计只有han6这样的大牛才能通过
: 了。而且不是n^3的算法说是不太好写吗?n^4的可能容易些。

avatar
j*2
76
我本来想:不就是八皇后改改吗?看完大家的回帖后,我只有说:Wow!
avatar
p*2
77

没看naive的,就看的匈牙利的。

【在 d**********x 的大作中提到】
: 二分图最大匹配?
: 用naive的网络流算法也不会到n^4吧。。

avatar
c*t
78
目前看,这个比较可行。
啥匈牙利的一点不懂。

m]

【在 Y********f 的大作中提到】
: 这道题是不是可以这样做:
: 1. 初始化选定N个元素A[0][0], A[1][1], A[2][2] .....
: 2. 对任意两个已经选定的元素A[i][j], A[k][m], 如果A[i][j] + A[k][m] > A[i][m]
: + A[k][j], 则从选定的N个元素里面删除A[i][j], A[k][m], 添加A[i][m], A[k][j]
: , 重复这一步知道不存在前续条件的一对元素。
: 这样得到的应该是最优的,收敛已经改也比较快。

avatar
s*t
79
感觉如果N的值够小的话(e.g.<=32)是可以用dp做的。
大的话不会了: D
用一个二进制数表示取列的状态,比如S = 8 = 1000表示列0被取了,其它3列没被取
dp[i][s]表示取到第i行的时候取列状态为s时的最大值
for(int i=0; ifor(int row=1; rowfor(int s=0; sdp[row][s] = max( dp[row-1][s/one_digit]+data[row][this_digit], dp[row]
[s]);
}
}
这里s/one_digit代表用某一位来试一下,如果这一位已经被取,那么不取,否则就取。
data[row][this_digit]代表这个矩阵里面我们正在考虑的row行this_digit列,也就是
用来试的那一列
输出dp[N-1][(1<复杂度N*2^N,所以只能处理小数据= =#
avatar
s*t
80
应该把max换成min...INF换成-INF...
我了个去的。。。这马虎程度真是一面就挂

row]

【在 s******t 的大作中提到】
: 感觉如果N的值够小的话(e.g.<=32)是可以用dp做的。
: 大的话不会了: D
: 用一个二进制数表示取列的状态,比如S = 8 = 1000表示列0被取了,其它3列没被取
: dp[i][s]表示取到第i行的时候取列状态为s时的最大值
: for(int i=0; i: for(int row=1; row: for(int s=0; s: dp[row][s] = max( dp[row-1][s/one_digit]+data[row][this_digit], dp[row]
: [s]);
: }

avatar
e*r
81
带权值的二分图最佳匹配用KM算法比匈牙利更快吧 匈牙利一般都只用来不带权值的二
分图吧

【在 p*****2 的大作中提到】
:
: 没看naive的,就看的匈牙利的。

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。