OI中坑点总结(持续更新)

以下是我个人OI生涯中遇到的坑点的一个小总结,可能是我太菜了,总是掉坑里,请大佬勿喷

1,多重背包的转移顺序

//默认每个物品体积为一(不想打码……)
//dp[i]表示占用背包容量i所能获得的最大价值
for(int i=1;i<=n;i++)
    for(int j=sum;j>0;j--)        //sum表示背包最大容量
        for(int k=0;k<=num;k++)    //num表示这个物品的数量,k表示选取当前物品k件
            if(j>=k)
                dp[j]=min(dp[j],dp[j-k]+value);

简单的多重背包模板,对于学过的人,大概清晰易懂吧

//dp[i]表示占用背包容量i所能获得的最大价值
for(int i=1;i<=n;i++)
    for(int k=0;k<=num;k++)    //num表示这个物品的数量,k表示选取当前物品k件
        for(int j=sum;j>k;j--)        //sum表示背包最大容量
            dp[j]=min(dp[j],dp[j-k]+value);

很相似的代码,只是改了转移顺序,但是为什么会错呢?

类比01背包的倒序转移,

考虑对于某种物品,标程中先枚举 j ,再枚举 k ,这样对于每个位置 j ,只能先于位置 j - i ,由 j - i ( i ∈ [ 0 , k ] )转移一次

而错误写法中,对于位置 j ,可以由转移过的位置 j - i 转移而来

这为什么会导致错误呢?考虑在 j 之前, j - i 已经由 j - i1 - i2 转移而来,多重背包的物品是可以组合的,所以以上的转移等价于 dp[ j - i1 - i2 ] 直接转移到 dp[ i ] ,而我们不能保证 i1 + i2 <= num ,即可能会取多于物品总数的物品

举个例子:

物品数量为7,我们枚举位置13,由8转移而来,而在此之前,位置8由4转移而来,等价于位置13由位置4转移而来,13-4=9>7,转移非法

原文地址:https://www.cnblogs.com/ivanovcraft/p/9496574.html

时间: 2024-10-21 10:43:59

OI中坑点总结(持续更新)的相关文章

博客园写作避坑指南【持续更新】

以下是花了一晚上调格式之后的血泪经验,如果之后有新的发现会持续更新-- 关于英文单词自动断行 如果你和我一样需要写英文博文,你会发现遇到行尾的英文单词全部被拦腰截断,看上去怪怪的. 这是因为博客园默认模板CSS将mainContent设置为word-break:break-all,即强制断行. 好在博客园开放了页面定制CSS代码,我们可以很方便地加入自己的设置来覆盖掉默认设置,只需要在"设置 -> 页面定制CSS代码"中加入以下代码: #mainContent { word-br

移动端WEBAPP开发遇到的坑,以及填坑方案!持续更新~~~~

前言:在移动端WEBAPP开发中会遇到各种各样的问题,通过此文对遇到的问题做一个归纳总结,方便自己日后查询,也给各位前端开发友人做一个参考.   此文中涉及的问题是本人开发中遇到的,解决方案是本人思考和查询资料的结果,纯属于个人的见解,一个需求,纵有千百种实现方式,所以如有歧义,请温柔吐槽! 此文会持续更新,前期内容会比较杂乱,待Q&A积累到一定量后,会进行整理. css3 1.Q:css3动画在Ios运行正常,在Android无法运行.因‘-webkit-’前缀未正确书写导致  A:-webk

Type Script在Visual Studio 2013中的问题汇总(持续更新…)

◆ TypeScript在vs2012下的问题 TypeScript对VS2012支持度比较低,建议升级为VS2013版本. ◆ 在VS2013中无法创建TypeScript项目 VS2013默认不支持TypeScript. 需要在[工具]-[扩展和更新]中安装TypeScript,目前为止(2015年9月16日)for VS2013的最新版TS为1.5版本,但是实测有一些问题,建议安装比较稳定的1.4版本 ◆ 编译提示“TypeScript\1.4\1.4\tsc.exe 无效”的问题 解决方

cocos creator踩坑日记(持续更新中...)

踩坑一 问题:项目在构建成Web Mobile后运行在浏览器和微信中,点击页面任何地方都会导致自动全屏 解决:在构建之后的main.js中,去掉 cc.view.enableAutoFullScreen(true) 踩坑二 问题:精灵使用move to后路径上会留下一些线条 原因:脏矩形出问题了 解决: Canvas模式下才有脏矩形,使用这个方法之前要判断 if (cc._renderType === cc.game.RENDER_TYPE_CANVAS) { cc.renderer.enabl

mysql 中的坑!!(持续更新)

mysql之天坑一:复制过滤器导致数据混乱() mysql版本5.6.20-log replicate_do_db:在该DB会话下面的所有sql都会在从库上执行 replicate_ignore_db:在该DB会话下面的所有sql都会在从库上忽略 以上两个复制过滤器很容易造成数据混乱,最好不要使用 replicate_do_db:如果在其他DB会话下面执行与指定复制DB相关的sql,该sql不会在从库上执行 并且不会导致复制失败,造成主从数据不一致.可以使用replicate_do_table替

移动端开发 经典坑 第二弹(持续更新)

1. translate 3d 容器中文字出现模糊 当容器的 translate 3d 属性中出现小数的时候,容器中的文字就会有一定的模糊,当该属性为*.5的时候,模糊的现象最严重. translat3d(-341.5px, 0px, 0px); 当这个值为整数的时候,就ok 解决的方案是更新容器的宽度,使之能被整除. 2. 移动端 img标签下缝隙问题 问题描述:在移动端布局的时候,img标签和下方容器会有1px的缝隙 这个问题一般也会出现在pc端的ie 浏览器中. 解决:移动端的解决是  

JavaScript中常用函数(入门级)(持续更新)

本文中枫竹梦介绍一些JavaScript中入门级的常用函数,对于已经过了入门的童鞋可选择略过,都是一些非常实用的函数.如果发现什么问题,欢迎讨论. 问题列表 Q1: 设计一个函数repeatIt(str, n),输入一个字符串str和一个整数n,返回n个str组成的字符串,如果str不是字符串则返回"Not a stirng".如,repeatIt("furzoom", 2),则返回"furzoomfurzoom".前往A1. Q2: 设计一个函

移动web开发都会遇到的坑(会持续更新)

1.自适应第一招 <meta name="viewport" content="width=device-width,initial-scale=1.0,user-scalable=no" /> 如果你发现自己做的网页不能适配,看看是不是遗漏的这行代码,initial-scale控制页面的初始化缩放比,user-scalable控制网页是否允许缩放. 2.IOS允许全屏浏览 <meta content=”yes” name=”apple-mobil

工作中遇到的问题 持续更新

第yi天: 对于myecplise报系统内存不足,报PermGen space错误时需要我们去修改myecplise中的内存,具体方法添加如下代码: -XX:PermSize=256M -XX:MaxPermSize=386m -Xms512m -Xmx1024m 用来解决这个问题. 接口的问题: Enumeration接口本身不是一个数据结构.但是,对其他数据结构非常重要. Enumeration接口定义了从一个数据结构得到连续数据的手段.例如,Enumeration定义了一个名为nextEl