题目链接

https://www.luogu.org/problemnew/show/P1025

解题思路

一道简单的dfs题,但是需要剪枝,否则会TLE。

洛谷 P1025 & [NOIP2001提高组] 数的划分(搜索剪枝)


我们用dfs(a,u,num)来表示上一个数为a,已经搜索完了a个数,现在的和是num。

 1 #include<iostream>
 2 using namespace std;
 3 int n,k,a;
 4 long long ans;
 5 void dfs(int a,int u,int now){
 6     if(now>n) return;
 7     if(u>k) return; 
 8     if(u==k){
 9         if(now==n) ans++;
10         return;
11     }
12     for(int i=a;i<=n;i++){
13         dfs(i,u+1,now+i);
14     }
15 }
16 int main(){
17     cin>>n>>k;
18     dfs(1,0,0);
19     cout<<ans;
20     return 0;
21 }
未剪枝代码

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-06-05
  • 2022-01-20
  • 2021-06-08
  • 2021-12-11
  • 2021-12-28
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2022-02-27
  • 2022-12-23
  • 2022-12-23
  • 2021-08-04
  • 2022-12-23
相关资源
相似解决方案