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

小猫爬山 dfs/状压

题意

形如:n个物品各有体积。一次至多运m体积,最少运几次。

例题:

https://codeforces.com/gym/104787/problem/J

https://www.luogu.com.cn/problem/P3052

https://www.luogu.com.cn/problem/P10483

解法

dfs

void dfs(int cur, int cnt) { //第几个物品,已运几次
    if (cnt >= ans) return;
    if (cur == m) {
        ans = cnt;
        return;
    }
    for (int i = 0; i < cnt; i++) { //枚举之前空隙
        if (sum[i] + v[cur] <= w) {
            sum[i] += v[cur];
            dfs(cur + 1, cnt);
            sum[i] -= v[cur];
        }
    }
    sum[cnt] = v[cur];
    dfs(cur + 1, cnt + 1);
    sum[cnt] = 0;
}

状压dp

枚举子集的写法,复杂度3m

ll dp[1 << 18], s[1 << 18];
void fun() {
    int k = (1 << m);
    for (int i = 1; i < k; i++) {
        for (int j = 0; j < m; j++) {
            if (i & (1 << j)) s[i] += v[j];
        }
    }
    dp[0] = 0;
    for (int i = 1; i < k; i++) dp[i] = 1e9;
    for (int i = 1; i < k; i++) {
        for (int j = i; j; j = (j - 1) & i) { //枚举子集
            if (s[j] > w) continue;
            dp[i] = min(dp[i], dp[i - j] + 1);
        }
    }
    cout << dp[k - 1] << endl;
}

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

相关文章:

  • #include<string>和#include<string.h>有什么区别
  • 群控系统服务端开发模式-应用开发-前端个人信息功能
  • 【最新版】Stable Diffusion4.9(AI绘画)下载及安装教程(附软件安装包)!
  • [CKS] K8S NetworkPolicy Set Up
  • 探索Pillow库:Python图像处理的瑞士军刀
  • 如何在算家云搭建Peach-9B-8k-Roleplay(文本生成)
  • Redis中的数据类型及应用场景(面试版)
  • macos 自定义用户目录方法, /Users/xxx 用户文件存储路径自定义方法
  • 构建在线教育系统源码:企业培训APP开发的技术指南
  • 在中国使用wordpress建网站的主要有三类人
  • TransmittableThreadLocal
  • Word文档被锁定无法编辑怎么办?一键快速移除Word编辑限制
  • 计算机网络803-(3)数据链路层
  • 行为型设计模式-状态(state)模式
  • 并发容器简介
  • 闪存刷新机制文献的解读
  • 记录一次两台虚拟机Oracle rac 心跳不能建立的排查
  • 二分法介绍
  • 回归预测 | Matlab实现GWO-BP-Adaboost灰狼算法优化BP神经网络集成学习多输入单输出回归预测
  • centos 服务器之间实现免密登录
  • 家里养宠物空气净化器有用吗?哪款最值得推荐?
  • 53-java中的多态是怎么实现的
  • 在NextChat中接入SiliconCloud API 体验不同的开源先进大语言模型
  • 慢速连接攻击是什么?慢速连接攻击怎么防护?
  • Android Gsensor 移植
  • 智谱发布新一代基座模型