算法設計與分析----半數集問題

半數集問題描述:
給定一個自然數n,由n 開始可以依次產生半數集set(n)中的數如下。
(1) n∈set(n);
(2) 在n 的左邊加上一個自然數,但該自然數不能超過最近添加的數的一半;
(3) 按此規則進行處理,直到不能再添加自然數爲止。
例如,set(6)={6,16,26,126,36,136}。半數集set(6)中有6 個元素。
注意半數集是多重集。

對於6的半數集來說,可以在6前加1,2,3,而在2的前面可以加1,3的前面可以加1,2,這是一個遞歸的過程。

#include<bits/stdc++.h>
using namespace std;
int sum = 1;
int n;
void dfs(int now)
{	
	for(int i=1;i<=now/2;i++)
	{
		sum++;
		dfs(i);
	}
}
int main()
{
	scanf("%d",&n);
	dfs(n); 
	printf("%d",sum);
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章