4,5TLE求改
查看原帖
4,5TLE求改
1253413
wcx_is_god楼主2024/5/9 19:27

4,5TLE了,用的DFS应该要剪枝,但是不知道怎么剪,求改。

#include <bits/stdc++.h>

using namespace std;

int a[100]; //a[i] 代表第i个位置选哪个数 
int n,k,ans = 0;

void dfs(int x, int last,int total){
	//退出条件
	if(total > n) return;
	if(x > k){
		int sum = 0;
		//判断:是否符合题目条件
		 for(int i = 1;i <= k; i++) sum += a[i];
		//输出:如果符合 
		if(sum == n){
			ans++;
		}
		return;
	}
	//递归
	for(int i = last; i <= n; i++){
		a[x] = i;
		dfs(x + 1,i,total+i);
	}
}
int main(){
	cin>>n>>k;
	dfs(1,1,0);
	cout << ans;
	return 0;
}

2024/5/9 19:27
加载中...