当前位置: 首页 > 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/news/283253.html

相关文章:

  • 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 移植
  • 智谱发布新一代基座模型
  • scrapy框架--快速了解
  • debug模式中调好,正常执行不生效
  • 安卓-广播LocalBroadcastManager
  • 标准c++---2
  • 什么是Socks5代理协议?揭秘其优势与应用
  • UDP英译汉网络词典
  • 在VB.net中,LINQ有什么查询表达式,举例说明
  • 掌握 Rust 中的 YAML 魔法:Serde_yaml 使用指南
  • QT在控件graphicsView中绘制箭头
  • Native开发与逆向第三篇 - hook JNI函数NewStringUTF