首页 > 其他分享 >4868. 数字替换(dfs,剪枝)

4868. 数字替换(dfs,剪枝)

时间:2023-03-07 18:34:42浏览次数:50  
标签:剪枝 10 int res step dfs 4868

https://www.acwing.com/problem/content/description/4871/
似乎没什么好办法,只能暴搜了,bfs对于那么多状态的搜索容易tle(bfs会把所有状态都彻底搜索一遍,相比dfs不方便剪枝,但是硬剪也可以)
但是单纯的用dfs也应该会tle,但是可以用剪枝优化
dfs优化:
1.最优化剪枝:
  (1)如果此时搜索的步数已经比临时的最小步数大了就直接return
  (2)如果已经搜索了5位,需要达到12位,至少还要乘6个数,但是相比最优解的10次还是要多,到5了就直接return
2.倒序拓展(提高搜索概率):因为要尽可能乘上大数,于是从9到2去拓展分支,尽可能提高搜索到的时间

#include<iostream>
using namespace std;
const int N = 1000;
const int INF = 1000000;
typedef long long LL;
LL x;
int n;
int res=INF;
void dfs(LL x,int step)//step步数
{
    int cnt=0;//
    bool st[10]={0};
    for( LL y=x;y>0;y/=10)cnt++,st[y%10]=true;
    if(step+n-cnt>=res)return; //最优化剪枝
    if(n == cnt)//位数相等
    {
        res=step;
        return;
    }
    for(int i=9;i>=2;i--)
        if(st[i])
            dfs(x*i,step+1);
}
int main()
{
    cin >> n >> x;
    dfs(x,0);
    if(res==INF)cout << -1 << endl;
    else cout << res << endl;
    return 0;
}

 

标签:剪枝,10,int,res,step,dfs,4868
From: https://www.cnblogs.com/lxl-233/p/17189100.html

相关文章

  • DFS
    DFS主要思想:1.终点,2.回溯。一、对于终点,我们要对其做一个特殊的处理也就是对结果的处理,处理完之后结束这一次的递归,即开始这一次递归的回溯二、回溯,有很多人都卡在这里。......
  • 【DFS】LeetCode 46. 全排列
    题目链接46.全排列思路本题是求排列问题.与组合问题不同的是,在排列问题中,不同的数字顺序被视为不同的排列,比如[1,2]与[2,1]是两种不同的排列。搜索树如下图所示,引......
  • 【DFS】LeetCode 90. 子集 II
    题目链接90.子集II思路去重方法与【DFS】LeetCode40.组合总和II思路相似代码classSolution{privateList<List<Integer>>result=newArrayList<>();......
  • DFS 序求 LCA
    很冷门的科技,但是有着显著的使用效果(减少建立虚树的常数)。本文学习自:Alex_Wei的博客首先遍历一遍整棵树,可以得到整棵树的DFS序和每个点的时间戳(记为\(dfn\))。考虑......
  • 【DFS】LeetCode 78. 子集
    题目链接78.子集思路求子集问题和77.组合(opensnewwindow)和131.分割回文串(opensnewwindow)又不一样了。如果把子集问题、组合问题、分割问题都抽象为一......
  • 【DFS】LeetCode 216. 组合总和 III
    题目链接216.组合总和III思路与【DFS】LeetCode40.组合总和II思路一致,只不过candidates数组在题目中明确说明了只有1到9。代码classSolution{private......
  • C++ 深度优先搜索(DFS) 讲解
    目录DFS初步概念DFS例题-迷宫游戏题目描述输入输出格式输入输出样例输入#1输出#1输入#2输出#2解题思路代码DFS初步概念DFS是一种深度搜索算法,它的特点是"不撞南墙不回头"......
  • dfs+hash
    题目:给定一个n×m的二维矩阵,其中的每个元素都是一个[1,9]之间的正整数。从矩阵中的任意位置出发,每次可以沿上下左右四个方向前进一步,走过的位置可以重复走。走了k......
  • mac系统上hdfs java api的简单使用
    1、背景在上一节中,我们简单学习了在命令行上如何操作hdfsshellapi,此处我们通过java程序来操作一下。2、环境准备需要在本地环境变量中配置HADOOP_HOME或在程序启动......
  • mac系统上hdfs java api的简单使用
    目录1、背景2、环境准备3、环境搭建3.1引入jar包3.2引入log4j.properties配置文件3.3初始化HadoopApi4、javaapi操作4.1创建目录4.2上传文件4.3列出目录下有哪些文......