算法思路:弱渣表示枚举a*b范围内可以组合的数量并标记,然后再从后往前找没有被标记的最大的数
#include<iostream>
#include<cstdlib>
using namespace std;
int main() {
int n, m, a, b, *p = NULL, temp;
cin >> a >> b;
p = (int *)calloc(sizeof(int) * a * b + 1, sizeof(int));
n = b;
m = a;
for(int i = 0; i < n + 1; i++) {
for(int j = 0; j < m + 1; j++) {
temp = i * a + j * b;
if(temp <= a * b && p[temp] == 0) {
p[temp] = 1;
}
}
}
for(int i = a * b; i >= 0; i--) {
if(p[i] == 0) {
cout << i;
break;
}
}
return 0;
}
有算法犇直接给了个结论a * b - a - b 忘有心人给证明过程