首页 > 其他分享 >所有背包问题模板

所有背包问题模板

时间:2023-05-27 09:22:39浏览次数:40  
标签:背包 int max 所有 -- amount 模板

01背包问题:

无优化

for(int i=1;i<=n;i++)
{
    for(int c=0;c<=m;c++)
    {
        f[i][c]=f[i-1][c];
        if(c>=w[i])
        f[i][c]=max(f[i][c],f[i-1][c-w[i]]+v[i]);
    }
}

一维数组优化:

for(int i=1;i<=n;i++)
{
    for(int c=m;c>=0;c--)
    {
        if(c>=w[i])
        f[c]=max(f[c],f[c-w[i]]+v[i]);
    }
}

更进一步的常数优化:

for(int i=1;i<=n;i++)
{
    sumw+=w[i];
    bound=max(m-sumw,w[i]);
    for(int c=m;c>=bound;c--)
    {
        if(c>=w[i])
        f[c]=max(f[c],f[c-w[i]]+v[i]);
    }
}

完全背包问题:

for(int i=1;i<=n;i++)
{
    for(int c=0;c<=m;c++)
    {
        if(c>=w[i])
        f[c]=max(f[c],f[c-w[i]]+v[i]);
    }
}

多重背包问题:

for(int i=1;i<=n;i++)
{
    if(w[i]*a[i]>m)
    {
        for(int c=0;c<=m;c++)
        {
        if(c>=w[i])
        f[c]=max(f[c],f[c-w[i]]+v[i]);
        }
    }
    else
    {
         k=1;amount=a[i];
         while(k<amount)
         {
             for(int c=k*w[i];c>=0;c--)
             {
                 if(c>=w[i])
                 f[c]=max(f[c],f[c-w[i]]+k*v[i]);
             }
             amount-=k;
             k<<=1;
         }  
         for(int c=amount*w[i];c>=0;c--)
         {
             f[c]=max(f[c],f[c-w[i]]+amount*v[i]);
         }
    } 
}

 

标签:背包,int,max,所有,--,amount,模板
From: https://www.cnblogs.com/momotrace/p/backpack-problem-muban.html

相关文章

  • 【模板】01背包问题
    一个在旅途中的长者有一个最多能用\(M\)公斤的背包,现在有\(n\)件物品,它们的重量分别是\(W1,W2,...,Wn\),它们的价值分别为\(C1,C2,...,Cn\).求旅行者能获得最大总价值。输入第1行:两个整数,\(M\)(背包容量,\(M\le200\))和\(n\)(物品数量,\(n\le30\));第\(2\)至\(n+1\)行:每行两个整数\(......
  • 9、背包问题
    内容来自刘宇波老师玩转算法面试1、0-1背包问题publicclassSolution{privatestaticclassNode{publicintindex;publicbooleanb;//w[index]要不要?publicintw;publicintv;publicNodeleft;//w......
  • 23-05-26 刷题-【中缀表达式求值的模板】
    basiccalculator系列题目:(可以作为模板题,记住)224.基本计算器-力扣(LeetCode)[hard]想法:中缀表达式求值。数据结构中栈的应用中缀转后缀。后缀能去掉括号。a+(b+c)*d==》abc+d*+后缀表达式求值:abc+d*+要考虑表达式的优先级,怎么处理括号。括号的优先级,不知......
  • 利用函数模板解决双倍功能 利用类模板解决绝对值功能 vector应用测试
    请使用模板参数设计实现双倍功能函数,函数功能要求实现返回值为输入参数的两倍,函数参数应能适应整型、浮点型、双精度型等各种类型,返回值类型与参数一样。裁判测试程序样例: #include<iostream>usingnamespacestd;/*请在这里填写答案*/intmain(void){charc='\0';......
  • IntelliJ IDEA 中如何查看一个类的所有继承关系,包括父类与子类
    一、查看当前类所有的父类1、找到当前类所在的位置,右键选择Diagrams,然后选择ShowDiagrams……,以spring的ClassPathXmlApplicationContext类为例: 2、在弹出的框中选择JavaClassDiagrams:3、可以看到如下的结果,所有的父类继承关系: 二、查看当前所有的子类请移步我的博......
  • 手机App模板开发的优势和弊端有哪些?
    手机App模板开发是自移动App开发行业产生以来,比较受欢迎、较简单的App制作方式,也是很多App开发公司提供给客户的服务,但凡事都有两面性,App模板制作手机客户端同时也具备一定的弊端,下面来看看手机App模板开发的优势和弊端。 手机App模板开发的优点App模板开发就是已经开发好的一套系......
  • Flask009_模板的使用
    渲染模板index.html1<!DOCTYPEhtml>2<htmllang="en">3<head>4<metacharset="UTF-8">5<title>首页</title>6</head>7<body>8<h1>这是首页</h1>9</body&g......
  • 【.NetCore】结合MasaDcc实现动态配置小程序消息模板并进行推送消息
    仅适用于更换小程序模板(属于换汤不换药)。可实现多环境对应不同的小程序模板一.配置文件格式"MiniProgramConfig":{"Token":"r8Z6weJVCb0","EncodingAESKey":"MhemkNp9DZXqe24A","AppId":"wxff9df85f87","App......
  • laytpl( Layui 的一款轻量 JavaScript 模板引擎)
    laytpl 是Layui的一款轻量JavaScript模板引擎,在字符解析上有着比较出色的表现。laytpl是一款颠覆性的JavaScript模板引擎文档说明一、模版语法输出一个普通字段,不转义html:{{d.field}}输出一个普通字段,并转义html:{{=d.field}}JavaScript脚本:{{#JavaScriptstate......
  • 求一个数所有因子的集合的子集中满足所有数均互质的最大子集
    题意:很明显了,就是把数n的所有因子求出来,在里面挑选一些数,使这些数之间均互质,求这些的最大个数。结论:先讲结论:最大个数为数n的质因数个数加1思路:我们已知一个数的质因数,就可以把这个数表示成若干质因数的乘积,例如:12=2*2*3;其中2,3是12的质因数,表达式中2的个数是2,3的......