自学背包问题的整理笔记

一.01背包

1.不一定装满:最普通的模型,随便搞= =,此时\(dp\)表示\(x\)体积能获得的最大价值。
2.恰好装x体积的最大价值:先把\(dp\)初始化一个极大负值,然后同上,若为负数则是不能恰好装到的。
3.能否恰好装满问题:同上。

二.完全背包

正着枚举就行了= =

三.多重背包:

体积为\(m\)的背包,有\(n\)种物品,第\(i\)种物品有\(ai\)个。
具体问题同01背包。
优化:
①二进制分组:把物品分成log个新物品,价值和体积分别是原物品的1,2,4,8……倍。然后用01背包去做。

int k=log(cnt[i])/log(2);
void js(int k,int j,int num)
{
    int temp=1;
    cc[++sum]=c[j];ww[sum]=w[j];
    num-=1;
    for(int i=1;i<=k-1;i++)
    {
        temp=temp*2;
        cc[++sum]=c[j]*temp;ww[sum]=w[j]*temp;
        num-=temp;
    }
    if(num>0)
    {
        cc[++sum]=c[j]*num;ww[sum]=w[j]*num;
    }
}

话说以前的代码写的真丑
②单调队列优化 不会 背代码吧= =

for(int i=1;i<=n;i++)
{
    scanf("%d%d%d",&c,&w,&s);
    if(s>m/c) s=m/c;
    for(int d=0;d<c;d++)
    {
        head=tail=1;
        for(int k=0;k<=(m-d)/c;k++)
        {
            int tmp=dp[k*c+d]-w*k;
            while(head<tail&&q[tail-1]<=tmp) tail--;
            q[tail]=tmp; num[tail++]=k;
            while(head<tail&&k-num[head]>s) head++;
            dp[k*c+d]=max(dp[k*c+d],q[head]+w*k);
        }
    } 
}

四.分组背包(泛化物品)

考虑这样的物品,它没有固定的体积和价值,它的价值随着分配给它的体积的变化而变化。抽象成数学模型是一个定义域为[0,V]中整数的函数H[V],对于每个在定义域中的v,对应一个价值H[v]。
求泛化物品的和:

for(int i=1;i<=t;i++)//遍历第i组 
{
    for(int j=m;j>=1;j--) 
    {
        for(int k=1;k<=z[i];k++)//第i组的第k个元素 
        {
            if(j-c[i][k]>=0) dp[j]=max(dp[j],dp[j-c[i][k]]+w[i][k]);
        }
    }
}

五.有依赖的背包

可以将依赖关系连边,看做森林。儿子更新父亲的时候看作两个泛化物品的合并。
其实就是树形\(dp\) \(emmm\),树上分组背包,详见有线电视网和hdu1561,一般需要数据较小。
还有一种特殊情况,依赖物品不是被依赖物品,这时候对附件集合进行01背包求出0~v-c[i]费用的最大价值,详见hdu3449。

转载于:https://www.cnblogs.com/sqrthyy/p/9746505.html

内容概要:本文详细介绍了施耐德M580系列PLC的存储结构、系统硬件架构、上电写入程序及CPU冗余特性。在存储结构方面,涵盖拓扑寻址、Device DDT远程寻址以及寄存器寻址三种方式,详细解释了不同类型的寻址方法及其应用场景。系统硬件架构部分,阐述了最小系统的构建要素,包括CPU、机架和模块的选择与配置,并介绍了常见的系统拓扑结构,如简单的机架间拓扑和远程子站以太网菊花链等。上电写入程序环节,说明了通过USB和以太网两种接口进行程序下载的具体步骤,特别是针对初次下载时IP地址的设置方法。最后,CPU冗余部分重点描述了热备功能的实现机制,包括IP通讯地址配置和热备拓扑结构。 适合人群:从事工业自动化领域工作的技术人员,特别是对PLC编程及系统集成有一定了解的工程师。 使用场景及目标:①帮助工程师理解施耐德M580系列PLC的寻址机制,以便更好地进行模块配置和编程;②指导工程师完成最小系统的搭建,优化系统拓扑结构的设计;③提供详细的上电写入程序指南,确保程序下载顺利进行;④解释CPU冗余的实现方式,提高系统的稳定性和可靠性。 其他说明:文中还涉及一些特殊模块的功能介绍,如定时器事件和Modbus串口通讯模块,这些内容有助于用户深入了解M580系列PLC的高级应用。此外,附录部分提供了远程子站和热备冗余系统的实物图片,便于用户直观理解相关概念。
### Lumerical FDTD Solutions 自学入门教程与整理笔记 #### 学习资源概述 Lumerical FDTD Solutions 是一款广泛应用于光子学仿真的软件工具,因其强大的电磁仿真功能备受科研人员和工程师青睐。为了帮助用户更好地理解和应用该软件,存在多份由社区成员编写的自学教程和学习笔记。 一份详尽的学习资料来自对官方Script教程视频的总结[Lumerical FDTD Solutions 脚本语言官方教程学习笔记][^1]。这份文档不仅涵盖了脚本语言的基础知识,还包括了许多实际操作中的技巧提示,非常适合有一定编程经验特别是熟悉MATLAB语法结构的人士作为快速上手指南。 另一份有价值的参考资料是由其他使用者分享的经验心得[FDTD Solutions自学整理笔记入门教程][^2]。此系列文章重点介绍了如何合理配置网格参数来提高模拟精度以及效率方面的建议;例如,在某些特殊场景下适当调整局部区域内的网格密度能够显著改善计算效果而不增加过多负担。 此外还有专门讨论光源设置部分的内容[FDTD Solutions自学整理笔记入门教程(4):光源][^3]。这里提到了不同类型源的选择依据及其潜在影响因素——比如当采用完美匹配层(PML)作为边界条件处理时可能会遇到的问题及解决方案。 通过上述提到的各种渠道获取的信息可以帮助初学者构建起较为完整的FDTD理论框架并逐步积累实践经验。 ```python # 示例Python代码用于展示如何读取文件(假设为CSV格式),并非直接关联到FDTD Simulation本身 import pandas as pd def read_simulation_data(file_path): data = pd.read_csv(file_path) return data.head() print(read_simulation_data('example.csv')) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值