数的划分--dfs+剪枝

P1025 NOIP 2001 提高组 数的划分 - 洛谷

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
#define N 100011
typedef  long long ll;
typedef pair<int,int> pii;
int a[7];
int n,k;
ll an;
void dfs(int s,int c)
{
	if(c==k)
	{
		if(s==0)///符合条件的 
		{
			an++;///直接+1就行,答案不会重复,因为是按递增写的 
		}else return;
	}
	if(c>k) return;///剪枝1 
	if(s<k-c) return;///剪枝2,说明后面不够1了 
	for(int i=max(a[c],1);i<=s;i++)///递增序,不重复还少dfs 
	{
		a[c+1]=i;
		dfs(s-i,c+1);
	}
}
int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    //solve();
	cin>>n>>k;
 	dfs(n,0);
 	cout<<an;
    return 0;
}
相关推荐
春弦_5 小时前
自用算法整理二
数据结构·算法·图论
hetao17338376 小时前
2026-10-22~23 hetao1733837 的刷题记录
c++·算法
java_nnnn6 小时前
LeetCode刷题滑动窗口(串联所有单词的子串+最小覆盖的子串)Java
算法·leetcode·职场和发展
Navigator_Z7 小时前
LeetCode //C - 1301. Number of Paths with Max Score
c语言·算法·leetcode
卡卡~~7 小时前
“101计划”核心课程实践教材《数据实验结构指导-C++语言版》题目集
开发语言·c++·学习·算法
企业数字化笔记8 小时前
AI视频增强后画质怎么验收?插值基线、伪细节与帧间闪烁的检查方法
人工智能·算法·音视频
学逆向的8 小时前
C 内存属性
c语言·开发语言·算法·网络安全
lengxuenong9 小时前
树状数组 · 信息学学习手册1-求和3个模板
c++·学习·算法·青少年编程
ComputerInBook9 小时前
泛函分析概观
人工智能·算法·机器学习·泛函分析