我知道矩阵中行和列的和的值。矩阵很小(最大10x10),值在0到99之间。
是否可以从此数据生成任何矩阵?我对所有可能的组合都不感兴趣。只有一个会好的。
实施例。
Task
sum in columns 2 5 2
sum in rows
7 ? ? ?
0 ? ? ?
2 ? ? ?
Answer
2 4 1
0 0 0
0 1 1
答案 0 :(得分:2)
我认为这不可能,因为答案不止一个。例如,
0 5 2
0 0 0
2 0 0
产生与您给出的矩阵相同的行和列总和。
答案 1 :(得分:1)
如果答案存在,此代码将找到一个:
int n, m;
int rows[n], cols[m];
int answer[n][m];
int n, m;
int rows[n], cols[m];
int answer[n][m];
for (int i = 0; i < n; i++) {
int need = rows[i];
for (int j = 0; need > 0 && j < m; j++) {
int add = need;
if (add > cols[j])
add = cols[j];
if (add > 99)
add = 99;
answer[i][j] = add;
need -= add;
cols[j] -= add;
}
}
答案 2 :(得分:1)
int n, m;
int rows[n], cols[m];
int answer[n][m];
while (true) {
boolean found = false;
int row = -1, col = -1;
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
if (rows[i] > 0 && cols[j] > 0 && (found == false || Math.min(rows[i], cols[j]) > Math.min(rows[row], cols[col])) {
found = true;
row = i;
col = j;
}
if (!found)
break;
answer[row][col]++;
rows[row]--;
cols[col]--;
}
工作原理:每次我们尝试使用col和row与大多数左侧单元格一起使用。