数的划分--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;
}
相关推荐
kobesdu2 分钟前
开源3D激光SLAM算法的异同点、优劣势与适配场景总结
算法·3d·机器人·ros
ZC跨境爬虫4 分钟前
3D 地球卫星轨道可视化平台开发 Day13(卫星可视化交互优化+丝滑悬停聚焦)
前端·算法·3d·json·交互
水木流年追梦8 分钟前
CodeTop Top 100 热门题目(按题型分类)
算法·leetcode
Tisfy14 分钟前
LeetCode 1722.执行交换操作后的最小汉明距离:连通图
算法·leetcode·dfs·题解·深度优先搜索·连通图
不知名的老吴21 分钟前
案例教学:最长递增子序列问题
数据结构·算法·动态规划
样例过了就是过了22 分钟前
LeetCode热题100 杨辉三角
c++·算法·leetcode·动态规划
念越29 分钟前
算法每日一题 Day05|双指针解决盛最多水的容器问题
算法·力扣
eggrall31 分钟前
Leetcode 最大连续 1 的个数 III(medium)
算法·leetcode·职场和发展
啊我不会诶32 分钟前
Educational Codeforces Round 120 (Rated for Div. 2) vp补题
c++·算法
贾斯汀玛尔斯35 分钟前
每天学一个算法--图算法(Graph Algorithms)
数据结构·算法