ホームに戻る
n個をk個のグループに分ける。

例えば6個を3個のグループに分けるとき、

{{1,1,4},{1,2,3},{2,2,2}}

のように分けることができます。
このような配列の配列を得ることができます。

vector<vector<int> > vv;

void f(int n, int k, int p, int mx, int c, vector<int> v){
	if(n-c<mx*(k-v.sz))return;
	if(c==n){
		if(v.sz==k)vv.pb(v);
		return;
	}
	if(mx<=p){
		vector<int> v1 = v;
		v1.pb(1);
		f(n,k,1,mx,c+1,v1);
		mx = max(mx,p+1);
		v[v.sz-1]++;
		f(n,k,p+1,mx,c+1,v);
	}
	else{
		v[v.sz-1]++;
		f(n,k,p+1,mx,c+1,v);
	}
}

vector<int> v;
v.pb(1);
vv.clear();
f(n,k,1,1,1,v);

inserted by FC2 system