出题人可能原神玩多了。
A
乘法少说要乘个 \(2\) 才有意义,所以答案是 \(\log\) 量级,直接 dp 设 \(f_{i,j}\) 表示算出 \(i\) 用了 \(j\) 个乘号最少用几个加号。
一个性质是,如果相加那么较小数不超过 \(4\),然后直接枚举加多少乘多少刷表。
f[1][0] = 0;
rep(i, 1, n) rep(j, 0, M - 1) if (f[i][j] != inf) {rep(k, 1, 4) rep(l, 0, M - 1 - j) if (f[k][l] != inf)chkmin(f[i + k][j + l], f[i][j] + f[k][l] + 1);for (int d = 2; d <= i && i * d <= n; ++d)rep(k, 0, M - 1 - j - 1) if (f[d][k] != inf)chkmin(f[i * d][j + k + 1], f[i][j] + f[d][k]);
}
B
拜谢 NT 怒敲 12k
暴切抽象计算几何。
哦我只是想说明太构式了不改了。