我需要C ++中的算法解决方案来解决分区问题
简单说明:查找所有得到数字n的总和。例如
这个问题似乎很简单,但是我找不到解决方案。我即将做出这种暴力破解,因为最高的输入是11。关于该问题的文章是高度数学的,我真的不明白。
谢谢你们!
/* E.g. input number:5 5 1 4 1 1 3 1 1 1 2 1 1 1 1 1 1 2 2 2 3 */ #include <iostream> #include <vector> using namespace std; void print (vector<int>& v, int level){ for(int i=0;i<=level;i++) cout << v[i] << " "; cout << endl; } void part(int n, vector<int>& v, int level){ int first; /* first is before last */ if(n<1) return ; v[level]=n; print(v, level); first=(level==0) ? 1 : v[level-1]; for(int i=first;i<=n/2;i++){ v[level]=i; /* replace last */ part(n-i, v, level+1); } } int main(){ int N; cout << "input number:"; cin >> N; vector<int> v(N); part(N, v, 0); }