自学背包问题的整理笔记

一.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

### 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、付费专栏及课程。

余额充值