这题怎么写啊啊啊

枚举集合2

题目ID:8001必做题100分

最新提交:

Wrong Answer

0 分

历史最高:

Wrong Answer

10 分

时间限制: 1000ms

空间限制: 32000kB

题目描述

时间限制:1s 空间限制:32M

题目描述:

给定一个整数 nn,从 1, 2, 3, …, n-1, n 中选出若干个数使得他们的和为 n,每个数最多只能选 3 次,请问有多少种方案。

输入格式:

一个整数 nn。(1 ≤ n ≤ 10)(1≤ n≤ 10)

输出格式:

一个整数表示方案数。

样例输入:

2

样例输出:

2

1 个赞

枚举集合1的“1”改“3”

2 个赞

就枚举数字改一下啊

2 个赞

我代码

#include <bits/stdc++.h>
using namespace std;
int n,cnt=0;
void dfs(int k,int sum){
	if(k==n+1){
		if(sum==n) cnt++;
		return ;	
	}
	dfs(k+1,sum+k);
	dfs(k+1,sum);
}
int main() {
	cin>>n;
	dfs(1,0);
	cout<<cnt<<'\n';	
	return 0;
}

2 个赞

能改的我都改了

1 个赞

额,你怎么这么写的,把:

	dfs(k+1,sum+k);
	dfs(k+1,sum);

改成:

for(int i=0;i<=3;i++){
		f(x+1,s+x*i);
	}
3 个赞

“每个数最多只能选 33 次”……

1 个赞

好了

1 个赞

枚举集合1能这么写是因为它只能选或不选这个数,也能表示为:

	for(int i=0;i<=1;i++){
		f(x+1,s+x*i);
	}
3 个赞

好像变量名不一样

1 个赞

对,忘改了,不过没什么事

2 个赞

但我太菜了,不会

1 个赞