打表,用dfs,完爆for循环
https://www.bnuoj.com/v3/contest_show.php?cid=8520#problem/E
#include<cstdio>
using namespace std;
int m[1000000];
int a, b, c;
void dfs(int aa, int bb, int cc) {
m[aa+bb*2+cc*3] = 1;
if (aa < a) dfs(aa+1, bb, cc);
if (bb < b) dfs(aa, bb+1, cc);
if (cc < c) dfs(aa, bb, cc+1);
}
int main() {
scanf("%d%d%d", &a, &b, &c);
dfs(0, 0, 0);
for (int i = 1; i <= a + 2 * b + 3 * c; ++ i)
if (m[i])
printf("%d\n", i);
return 0;
}
本文通过使用深度优先搜索(DFS)算法解决一个特定的组合问题,对比传统的for循环方法,展示了DFS在解决这类问题上的优势。通过对不同状态的递归遍历,实现了所有可能组合的有效枚举。
2108

被折叠的 条评论
为什么被折叠?



