P1025 [NOIP2001 提高组] 数的划分(dfs+剪枝 or dp)

这篇具有很好参考价值的文章主要介绍了P1025 [NOIP2001 提高组] 数的划分(dfs+剪枝 or dp)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

dfs+剪枝

思路:暴力枚举搜索,不过要优雅剪枝一下下

1:处理重复情况-->我们只需要然后方取值从前往后的时候呈现递增(可以相等,即不递减)

2:剪枝-->基于上思想,剩下的“盘子”里面的数至少都大于等于当前“盘子”的数,所以我们取完当前盘子的数完,就可判断-->剩下的盘子取最小(即取都当前盘子的数,看总和还不会超过n,会那肯定不满足)(sum+i*(k-pos+1)<=n )

3:ACcode:

#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,k,cnt;
void dfs(int pos,int now,int sum) {

   if(pos==k+1){
   	if(sum==n) cnt++;//刚好 
   	return;
   }
   //剪枝:sum+i*(k-pos+1)<=n 
   for(int i=now;sum+i*(k-pos+1)<=n;i++){
   	dfs(pos+1,i,sum+i);
   }
}
void solve() {
	cin>>n>>k;
	dfs(1,1,0);
	cout<<cnt<<"\n";
}
signed main() {
	ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
	solve();
	return 0;
}

dp

思路:

f[i][x] 表示 i 分成 x 个非空的数的方案数。

显然 i<x 时 f[i][x]=0 , i=x 时 f[i][x]=1;

其余的状态,我们分情况讨论:

①有1的 ②没有1的

第一种情况,方案数为 f[i-1][x-1]

第二种情况,方案数为 f[i-x][x] (此时 i 必须大于 x)

所以,状态转移方程为: f[i][x]=f[i-1][x-1]+f[i-x][x]

ACcode:

#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,k,f[2005][10]; 
void solve() {
	cin>>n>>k;
	for(int i=1;i<=n;i++){
		f[i][1]=1;
		f[i][0]=1;
	}
	for(int i=2;i<=k;i++){
		f[1][i]=0;
	}
	for(int i=2;i<=n;i++)
	for(int j=2;j<=k;j++){
		if(i>j)f[i][j]=f[i-1][j-1]+f[i-j][j];
		else f[i][j]=f[i-1][j-1];
	}
	cout<<f[n][k];
}
signed main() {
	ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
	solve();
	return 0;
}

over~文章来源地址https://www.toymoban.com/news/detail-619281.html

到了这里,关于P1025 [NOIP2001 提高组] 数的划分(dfs+剪枝 or dp)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【洛谷 P1024】[NOIP2001 提高组] 一元三次方程求解 题解(数学+二分答案)

    有形如: a x 3 + b x 2 + c x + d = 0 a x^3 + b x^2 + c x + d = 0 a x 3 + b x 2 + c x + d = 0 这样的一个一元三次方程。给出该方程中各项的系数( a , b , c , d a,b,c,d a , b , c , d 均为实数),并约定该方程存在三个不同实根(根的范围在 − 100 -100 − 100 至 100 100 100 之间),且根与根之差的绝对值

    2024年02月06日
    浏览(24)
  • P1030 [NOIP2001 普及组] 求先序排列

    给出一棵二叉树的中序与后序排列。求出它的先序排列。(约定树结点用不同的大写字母表示,且二叉树的节点个数 ≤8≤8)。 共两行,均为大写字母组成的字符串,表示一棵二叉树的中序与后序排列。 共一行一个字符串,表示一棵二叉树的先序。 输入 #1 复制 输出 #1 复制

    2023年04月22日
    浏览(30)
  • 【洛谷 P1029】[NOIP2001 普及组] 最大公约数和最小公倍数问题 题解(更相减损术)

    输入两个正整数 x 0 , y 0 x_0, y_0 x 0 ​ , y 0 ​ ,求出满足下列条件的 P , Q P, Q P , Q 的个数: P , Q P,Q P , Q 是正整数。 要求 P , Q P, Q P , Q 以 x 0 x_0 x 0 ​ 为最大公约数,以 y 0 y_0 y 0 ​ 为最小公倍数。 试求:满足条件的所有可能的 P , Q P, Q P , Q 的个数。 一行两个正整数 x 0 , y 0

    2024年02月09日
    浏览(33)
  • 2023NOIP A层联测18-划分

    题目 字符串编号从 1 1 1 开始。 若 n = k n=k n = k ,最大值很好求,方案数就是 1 1 1 。 若前 k k k 个都没有 1 1 1 ,设第一个 1 1 1 出现的位置为 m m m ,最大值是选 m m m 开始的后缀,划分方案是在前 m m m 个空位插大于等于 k − 1 k-1 k − 1 个隔板,用组合数可以轻松求出。 否则,

    2024年02月08日
    浏览(22)
  • 【搜索】DFS剪枝与优化

    算法提高课笔记 剪枝 是什么意思呢? 我们知道,不管是内部搜索还是外部搜索,都可以形成一棵搜索树,如果将搜索树全部遍历一遍,效率会很低,但如果我们能在搜索的过程中,提前预知,判断某一些不可能是正确答案的情况,就可以不用遍历其下的子树,从而提高我们

    2024年02月14日
    浏览(43)
  • P3956棋盘 ( dfs + 剪枝

    本质上来说并不是特别复杂的搜索,只不过这个搜索时要维护多个状态量,没怎么做过属于是 同时有一个剪枝就是维护走到 (i,j)的最短花费,大于这个花费就直接减掉

    2024年02月13日
    浏览(32)
  • DFS:深搜+回溯+剪枝解决组合问题

                                                   创作不易,感谢支持!!! . - 力扣(LeetCode) . - 力扣(LeetCode) . - 力扣(LeetCode) . - 力扣(LeetCode) . - 力扣(LeetCode) . - 力扣(LeetCode) . - 力扣(LeetCode) . - 力扣(LeetCode) 该题和前面是类似的,但是用回溯算法,会超

    2024年04月12日
    浏览(26)
  • 组合(力扣)dfs + 回溯 + 剪枝 JAVA

    给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 示例 1: 输入:n = 4, k = 2 输出: [ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4], ] 示例 2: 输入:n = 1, k = 1 输出:[[1]] 提示: 1 = n = 20 1 = k = n 解题思路: 1.每个元素有选与不选两种情况,

    2024年02月16日
    浏览(43)
  • DFS(基础,回溯,剪枝,记忆化)搜索

    DFS(深度优先搜索) 基于递归求解问题,而针对搜索的过程 对于问题的介入状态叫初始状态,要求的状态叫目标状态 这里的搜索就是对实时产生的状态进行分析检测,直到得到一个目标状态或符合要求的最佳状态为止。对于实时产生新的状态的过程叫扩展 搜索的要点: 1.选定初

    2024年04月12日
    浏览(28)
  • DFS:深搜+回溯+剪枝解决矩阵搜索问题

                                                   创作不易,感谢三连!!  . - 力扣(LeetCode) . - 力扣(LeetCode) . - 力扣(LeetCode) . - 力扣(LeetCode) . - 力扣(LeetCode) . - 力扣(LeetCode) 1、矩阵搜索问题经常要用到向量,也就是我们可以通过dx和dy来帮助我们定义方向

    2024年04月17日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包