rusted-coil old blog

はてなダイアリー上で書かれていた旧東方錆恋録 ~Slipping Rusted Magnemite~のデータをそのままインポートしたブログです。リダイレクト先を変える前に気づいたらダイアリーがサービス終了していたので、とりあえずリンク切れを防ぐため公開しています。

nCm

突然だけどnCmを列挙するアルゴリズム


そんなに競技プログラミングやる気なかったけど折角だからICPC出たら組み合わせの総当りで詰み、
その後今日TopCopderやったら組み合わせの総当りで詰んだ。
ということで浅知恵で考えたものをメモしてみる。O(いっぱい)
まあこの程度のアルゴリズム能力ですわ

void comb(vector<vector<int>> *data, int n, int m)
{
	vector<int> kari;
	if(n < m || m==0)
		return;
	if(n == 1)
	{
		kari.push_back(1);
		data->push_back(kari);
		return;
	}

	int bef,af;
	bef = data->size();
	comb(data,n-1,m-1);
	af = data->size();
	if(bef == af)
	{
		kari.push_back(n);
		data->push_back(kari);
	}
	for(int a=bef; a<af; a++)
		(*data)[a].push_back(n);

	comb(data,n-1,m);
}