当前位置: 首页 > article >正文

acwing算法提高之搜索--剪枝

目录

  • 1 介绍
  • 2 训练

1 介绍

本专题用来记录使用dfs剪枝技巧求解的题目。

剪枝有以下思路:

  1. 优化搜索顺序。
  2. 可行性剪枝。
  3. 最优性剪枝。
  4. 唯一性剪枝,也叫去除冗余。
  5. 记忆化搜索,也叫dp。

2 训练

题目1:165小猫爬山

C++代码如下,

#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>

using namespace std;

const int N = 20;
int n, m;
vector<int> a;
vector<vector<int>> group;
int res = 20;

bool check(int x, int j) {
    int s = 0;
    for (auto v : group[j]) s += v;
    return s + x <= m;
}

void dfs(int i, int groupsize) {
    if (groupsize >= res) {//最优性剪枝
        return;
    }
    
    if (i == n) {
        res = groupsize;
    }
    
    int x = a[i];
    
    //将x放入哪个组
    for (int j = 0; j < groupsize; ++j) {
        //将x放入第j组
        if (check(x, j)) { //可行性剪枝
            group[j].emplace_back(x);
            dfs(i + 1, groupsize);
            group[j].pop_back();
        }
    }
    
    //新开一个组
    group[groupsize].emplace_back(x);
    dfs(i + 1, groupsize + 1);
    group[groupsize].pop_back();
    return;
}

int main() {
    cin >> n >> m;
    a.resize(n + 1);
    for (int i = 0; i < n; ++i) cin >> a[i];
    group.resize(n + 1);
    
    sort(a.begin(), a.end());
    reverse(a.begin(), a.end()); //从大到小枚举,优化搜索顺序
    
    //放置原则
    dfs(0, 0);
    cout << res << endl;
    
    return 0;
}

题目2


http://www.kler.cn/a/272668.html

相关文章:

  • 如何在不暴露MinIO地址的情况下,用Spring Boot与KKFileView实现文件预览
  • Linux 管道操作
  • PHP智慧小区物业管理小程序
  • Android 12.0 息屏休眠后立即启动屏保功能实现
  • Python股票量化交易分析-开发属于自己的指标
  • 1.17组会汇报
  • Verilog中`include的用法
  • 网络面试题整理
  • VisualStudio的使用
  • java数据结构与算法刷题-----LeetCode55. 跳跃游戏
  • 组件化开发
  • 视频桥接芯片#LT8912B适用于MIPIDSI转HDMI+LVDS应用方案,提供技术支持。
  • 算法——贪心
  • 中霖教育好吗?口碑怎么样?
  • JavaWeb:vue、AJax、ELement、maven、SpringBoot、、Http、Tomcat、请求响应、分层解耦
  • Tailwind CSS如何使用
  • 探寻未来之路:计算机行业发展趋势与机遇
  • 可视化搭建一个智慧零售订单平台
  • Android的三种动画详解(帧动画,View动画,属性动画)
  • Java学习30-常用类 Date类
  • 【赠书】从深度学习到图神经网络:模型与实践
  • 基于大语言模型(LLM)的表格理解任务探索与实践
  • 【SpringBoot】请求与响应参数 IoC与DI 总结
  • uniapp开发常用辅助函数mapState、mapMutations和computed来映射vue属性和方法
  • 一些 AI 工具
  • Redis基本使用