- 动规讲解基础讲解三——混合背包(背包模板)

news/2024/5/2 10:51:51

将01背包,完全背包,和多重完全背包问题结合起来,那么就是混合三种背的问题

根据三种背包的思想,那么可以得到
混合三种背包的问题可以这样子求解
  for(int i=1; i<=N; ++i)
    if(第i件物品是01背包)
      zeroOnePack(c[i],w[i]);
    else if(第i件物品是完全背包)
      completePack(c[i],w[i]);
    else if(第i件物品是多重完全背包)
      multiplePack(c[i],w[i],n[i]);
这样能得到最优解的原因是,因为前一层已经是得到最优解了,
当前层求解最优解的时候,我们考虑要使用三种背包中的哪一种方法
而不用考虑前一层是怎么得到最优解的

#include <stdio.h>
#include <string.h>
int cash;
int n[11],dk[11];
int dp[1000000];
inline int max(const int &a, const int &b)
{
    return a < b ? b : a;
}
void CompletePack(int cost)
{
    for(int i=cost; i<=cash; ++i)
        dp[i] = max(dp[i],dp[i-cost]+cost);
}
void ZeroOnePack(int cost)
{
    for(int i=cash; i>=cost; --i)
        dp[i] = max(dp[i],dp[i-cost]+cost);
}
void MultiplePack(int cnt, int cost)
{
    if(cnt*cost >=cash)//如果第i种物品的费用总和超过背包容量,那么就是完全背包问题
        CompletePack(cost);
    else
    {
        int k = 1;//二进制拆分
        while(k<cnt)//判断剩下的数字能不能够拆分为k
        {
            ZeroOnePack(cost*k);
            cnt -=k;
            k<<=1;
        }
        ZeroOnePack(cnt*cost);
    }
}
int main()
{
    //输入的处理以及函数的调用
    return 0;
}

 如果对你有所帮助,别忘了加好评哦;么么哒!!下次见!88

转载于:https://www.cnblogs.com/cangT-Tlan/p/6217401.html


http://www.niftyadmin.cn/n/1808726.html

相关文章

BZOJ3732 解析报告//LCA,最小生成树

3732: Network 题目描述 给你N个点的无向图 (1 < N < 15,000)&#xff0c;记为&#xff1a;1…N。 图中有M条边 (1 < M < 30,000) &#xff0c;第j条边的长度为&#xff1a; d_j ( 1 < d_j < 1,000,000,000). 现在有 K个询问 (1 < K < 15,000)。 每…

java语句输出0-9_【视频+图文】Java经典基础练习题(二)输出9*9乘法口诀表

能解决题目的代码并不是一次就可以写好的我们需要根据我们的思路写出后通过debug模式找到不足再进行更改多次测试后才可得到能解决题目的代码&#xff01;通过学习&#xff0c;练习【Java基础经典练习题】让我们一起来培养这种解决问题思路。一、视频讲解二、思路分析Q1&#x…

BOS物流项目笔记(11)

1、学习计划 &#xff08;1&#xff09;在realm中进行授权 &#xff08;2&#xff09;使用shiro的方法注解方式权限控制 在spring文件中配置开启shiro注解支持 在Action方法上使用注解 &#xff08;3&#xff09;使用shiro的标签进行权限控制 在页面引入shiro的标签库 在页…

BLOG搬家了,新家地址http://changeself.com,改变网!

感谢大家多年的支持&#xff0c;感谢CSDN的支持&#xff0c;跟很多老人一样&#xff0c;实在是无奈&#xff0c;必须自己搞一个独立的站点来继续经营自己的博客&#xff1b; 新家地址&#xff1a;http://changeself.com&#xff0c;这个域名我5年前就买下了&#xff0c;今天终…

Python标准库11 多进程探索 (multiprocessing包)

作者&#xff1a;Vamei 出处&#xff1a;http://www.cnblogs.com/vamei 欢迎转载&#xff0c;也请保留这段声明。谢谢&#xff01; 在初步了解Python多进程之后&#xff0c;我们可以继续探索multiprocessing包中更加高级的工具。这些工具可以让我们更加便利地实现多进程。 进程…

专业程序员的7个特质

专业程序员的7个特质 成为一个专业人士是所有程序员的目标。笔者在硅谷待了将近3年&#xff0c;在这里近距离观察了Google, Facebook, Uber等公司的大拿&#xff0c;并有幸与其中的一部分一起工作。在此分享大牛程序员的行为风格以及我自己的所思所想&#xff0c;希望对大家有所…

java list 底层构建_Java基础进阶 集合框架详解

今日任务1、List接口介绍(掌握常用List特有方法)2、练习3、ArrayList介绍(必须清楚集合的特征、掌握集合中的方法)4、LinkedList介绍(必须清楚集合的特征、掌握集合中的方法)5、Vector 类介绍(了解)6、List下的子类总结(掌握)7、Set 接口介绍(掌握Set集合的特性)8、HashSet 集合…

Tahiti: Voices of Paradise 专辑中文名: 大溪地:天堂之声

专辑英文名: Tahiti: Voices of Paradise 专辑中文名: 大溪地&#xff1a;天堂之声 艺术家: Dan Gibson 资源格式: MP3 发行时间: 2008年07月01日 地区: 加拿大 简介: 发行公司&#xff1a;Solitudes 音乐风格&#xff1a;New Age, World 专辑介绍&#xff1a; Dan Gibson此次…