秋招算法——背包模型——423采药问题——模板:背包问题

文章目录

题目描述
思路分析
  • 这里明显是使用背包问题,所以这里参考一下背包这个模板题的内容
  • 这个是朴素版的模板,没有经过代码的优化
cpp 复制代码
#include <iostream>
#include <algorithm>

using namespace std;

const int N = 1100;
const int V = 1100;
int n,v;  // 分别表示背包物体的数量和背包的容量
int f[N][V];  // 这个是状态转移矩阵
int vs[N];  // 不同物体的容量矩阵
int ws1[N];  // 不同物体的价值矩阵

int main(){
    cin>>n>>v;
    for(int i = 1 ;i <= n;i ++){
        cin>>vs[i]>>ws1[i];
    }
    // 这里需要迭代两次进行计算
    for (int i = 1; i <= n; ++i) {
        for (int j = 0; j <= v ; ++j) {
            f[i][j] = max(f[i -1][j],f[i][j]);
            if (j >= vs[i])
                f[i][j] = max(f[i][j],f[i - 1][j - vs[i]] + ws1[i]);    
        }
        
    }
}
  • 下述是经过优化之后的模板
    • 主要是使用了滚动数组,并且优化了空间之后的操作
cpp 复制代码
#include <iostream>
#include <algorithm>

using namespace std;

const int N = 1100;
const int V = 1100;
int n,v;
int f[N];
int vs[N];
int ws1[N];

int main(){
    cin>>n>>v;
    for(int i = 1 ;i <= n;i ++){
        cin>>vs[i]>>ws1[i];
    }

    for (int i = 1; i <= n; ++i) {
        for (int j = v; j >= 0 && j >= vs[i]; --j) {
                f[j] = max(f[j],f[j - vs[i]] + ws1[i]);
        }

    }

    cout<<f[v];
}

背包问题总共有三种,分别是求最大值、最小值和方案数量

实现代码
cpp 复制代码
// 组合数问题
#include <iostream>
#include <algorithm>

using namespace std;

const int N = 110;
const int M = 11000;
int f[M],g[N];

int main(){
    int n, m;
    cin>>n>>m;
    for(int i = 1;i <= n;i ++) cin>>g[i];
    f[0] = 1;
    for (int i = 1; i <= n; ++i) {
        for (int j = m; j >= 1 && j >= g[i]; --j) {
//            f[j] = max(f[j],f[j - g[i]] + g[i]);
            f[j] = f[j] + f[j - g[i]];
        }
    }
    cout<<f[m]<<endl;

}
分析总结
  • 这里要明白最大值、最小值和装载货物数量之间的关系。
  • 同时还要记住这是一个模板题,记住模板就是会做。
相关推荐
吃好睡好便好5 小时前
在Matlab中绘制横直方图
开发语言·学习·算法·matlab
仰泳之鹅5 小时前
【C语言】自定义数据类型2——联合体与枚举
c语言·开发语言·算法
x_yeyue7 小时前
三角形数
笔记·算法·数论·组合数学
念何架构之路8 小时前
Go语言加密算法
数据结构·算法·哈希算法
AI科技星8 小时前
《数学公理体系·第三部·数术几何》(2026 年版)
c语言·开发语言·线性代数·算法·矩阵·量子计算·agi
失去的青春---夕阳下的奔跑8 小时前
560. 和为 K 的子数组
数据结构·算法·leetcode
黎阳之光9 小时前
黎阳之光:以视频孪生重构智慧医院信息化,打造高标项目核心竞争力
大数据·人工智能·物联网·算法·数字孪生
丷丩9 小时前
三级缓存下MVT地图瓦片服务性能优化策略
算法·缓存·性能优化·gis·geoai-up
m0_6294947310 小时前
LeetCode 热题 100-----25.回文链表
数据结构·算法·leetcode·链表
ʚ希希ɞ ྀ11 小时前
单词拆分----dp
算法