第十二届蓝桥杯-整数分解(dp+dfs+剪枝)

 第十二届蓝桥杯 ——整数分解_六级不考550+不改名-CSDN博客icon-default.png?t=M1L8https://blog.csdn.net/weixin_46239370/article/details/116566616

#include
using namespace std;

typedef long long ll;
ll f[10][3000];

ll dfs(int k, int n)
{
	if (f[k][n] != -1) return f[k][n];//剪枝
	if (k == 1) {
		if (n == 0)
			return 0;
		else
			return 1;
	}
	f[k][n] = 0;
	for (int i = 1; i <= n; i++) {
		f[k][n] += dfs(k - 1, n - i); //这不是dp嘛wc  dp加递归 牛~!
	}
	return f[k][n];
}
int main()
{
	memset(f, -1, sizeof f);//
	cout << dfs(5, 2021) << endl;

	return 0;
}

你可能感兴趣的:(深度优先,蓝桥杯,剪枝)