正解:背包dp

解题报告:

昂先放链接qwq

感觉还挺妙的,,,真的我觉得我直接做可能是想不到背包的,,,我大概想不出是个背包的QAQ

但是知道是背包之后觉得,哦,好像长得也确实挺背包的吼,而且其实是个比较经典的样子

所以为什么想不到呢,,,大概就 基础不牢地动山摇趴QAQ(不其实就是菜而已

然后大概随便港下就成qwq

首先是很明显是个01背包咯,然后就思考怎么设状态怎么转移

直接f[i][j]表示决定了前i个挂饰并且有j个挂钩时的vmax

就转移,没什么可讲的鸭,就

不选 f[i-1][j] 选f[i-1][max(j-a[i],0)+1]+b[i]

哦还是有俩要注意的点辣,分开港下qwq

第一个是关于那个max的

显然的是,如果我们有一个挂饰,挂钩特别特别多,超过了n,那它实际上有n就够了(其实应该是不满n的辣,先这么说qwq)所以其实从max转移来就是了

大概酱,其实还是有点儿无法理解的QAQ

如果实在无法理解我们可以酱

就是,我们可以不是从已知推出当前这个

而是,从当前这个推出能转移到的

能懂嘛qwq

这样就很好理解了鸭,转移都差不多嘛,但是关于超过n实际有n就够了这个理论的话就可以很简单的实现不需要再拐弯辣qwq

就直接 min(n,j-1+a[i].w) 这样就很好理解了嘛qwq

第二个是个需要注意的

就我们在转移前要先对这个挂饰排序,根据挂钩数排序

这个其实也能理解趴?因为这个其实是有点儿后效性的,就有点像之前做的那个什么外星人做菜的dp(那个我也想写题解qwq)

就是它是有后效性的,不知道能理解嘛?不能理解我明儿再来港qwq

所以就先排序,然后转移然后就结束了呢!

#include<bits/stdc++.h>
using namespace std;
][],n;
][];
];
inline bool cmp(str n1,str n2){return n1.w>n2.w;}
inline int read()
{
    ;;
    '))ch=getchar();
    ;
    )+(x<<)+(ch^'),ch=getchar();
    return y?x:-x;
}
int main()
{
    n=read();
    ;i<=n;i++)a[i].w=read(),a[i].v=read();
    sort(a+,a++n,cmp);
    ;o[][]=,][]=;
    ;i<=n;i++)
        ;j<=n;j++)
        {
            ][j] && j!=)
            {
                +a[i].w);
                f[i][t]=max(f[i][t],f[i-][j]+a[i].v);
                o[i][t]=;
            }
            f[i][j]=max(f[i][j],f[i-][j]);
            ][j]==)o[i][j]=;
        }
    ;i<=n;i++)if(o[n][i])ans=max(ans,f[n][i]);
    printf("%d",ans);
    ;
}

昂我放的是法二的代码因为感觉法二挺好理解的法一那个我还是没有很能理解QAQ

洛谷P4138 挂饰 背包的更多相关文章

  1. 洛谷 P1858 多人背包 DP

    目录 题面 题目链接 题目描述 输入输出格式 输入格式 输出格式 输入输出样例 输入样例 输出样例 说明 思路 AC代码 题面 题目链接 洛谷 P1858 多人背包 题目描述 求01背包前k优解的价值 ...

  2. [洛谷P1858] 多人背包

    洛谷题目链接:多人背包 题目描述 求01背包前k优解的价值和 输入输出格式 输入格式: 第一行三个数K.V.N 接下来每行两个数,表示体积和价值 输出格式: 前k优解的价值和 输入输出样例 输入样例# ...

  3. 【BZOJ4247】挂饰 背包

    [BZOJ4247]挂饰 Description JOI君有N个装在手机上的挂饰,编号为1...N. JOI君可以将其中的一些装在手机上. JOI君的挂饰有一些与众不同——其中的一些挂饰附有可以挂其他 ...

  4. 【bzoj4247】挂饰 背包dp

    题目描述 JOI君有N个装在手机上的挂饰,编号为1...N. JOI君可以将其中的一些装在手机上. JOI君的挂饰有一些与众不同——其中的一些挂饰附有可以挂其他挂件的挂钩.每个挂件要么直接挂在手机上, ...

  5. bzoj4247: 挂饰(背包)

    4247: 挂饰 题目:传送门 题解: 看完题目很明显的一道二维背包(一开始还推错了) 设f[i][j]表示前i个挂饰选完(可以有不选)之后还剩下j个挂钩的最大值(j最多贡献为n) 那么f[i][j] ...

  6. BZOJ 4247 挂饰 背包DP

    4247: 挂饰 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/problem.php?id ...

  7. bzoj4247: 挂饰(背包dp)

    4247: 挂饰 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 1136  Solved: 454[Submit][Status][Discuss] ...

  8. 洛谷 P1858 多人背包

    求01背包前k优解的价值和 输入输出格式 Input/output 输入格式:第一行三个数K.V.N(k<=50,v<=5000,n<=200)接下来每行两个数,表示体积和价值输出格 ...

  9. 【洛谷】【动态规划/背包】P1417 烹调方案

    由于你的帮助,火星只遭受了最小的损失.但gw懒得重建家园了,就造了一艘飞船飞向遥远的earth星.不过飞船飞到一半,gw发现了一个很严重的问题:肚子饿了~ gw还是会做饭的,于是拿出了储藏的食物准备填 ...

随机推荐

  1. SaltStack Grains 和 Pillar

    Grains: (1) grains 是服务器的一系列粒子信息,也就是服务器的一系列物理,软件环境信息(2) grains 是 minion 启动时收集到的一些系统信息,比如操作系统版本.内核版本.C ...

  2. 第三篇:配置Hadoop的Eclipse开发环境

    前言 在先前的文章中,已经介绍了如何在Ubuntu Kylin操作系统下搭建Hadoop运行环境,而现在将在之前工作的基础上搭建Eclipse开发环境. 配置 开发环境:Eclipse 4.2,其他同 ...

  3. 分析JobInProgress中Map/Reduce任务分配

    1.JobTracker能否决定给当前的TaskTracker节点分配一个Job的具体的哪一个任务? 2.什么是map本地任务? 3.nonRunningMapCache的作用是什么? 4.从Task ...

  4. linux系统cpu和内存占用率

    1.top 使用权限:所有使用者 使用方式:top [-] [d delay] [q] [c] [S] [s] [i] [n] [b] 说明:即时显示process的动态 d :改变显示的更新速度,或 ...

  5. 使用es6的蹦床函数解决递归造成的堆栈溢出

      首先,我们先定义一个函数,使用递归的思想写求和的方法: function sum(x, y) { if (y > 0) { return sum(x + 1, y - 1); } else ...

  6. sql查看本机IP地址

    CREATE FUNCTION [dbo].[GetCurrentIP] () ) AS BEGIN ); SELECT @IP_Address = client_net_address FROM s ...

  7. Qt编写百度离线版人脸识别+比对+活体检测

    在AI技术发展迅猛的今天,很多设备都希望加上人脸识别功能,好像不加上点人脸识别功能感觉不够高大上,都往人脸识别这边靠,手机刷脸解锁,刷脸支付,刷脸开门,刷脸金融,刷脸安防,是不是以后还可以刷脸匹配男女 ...

  8. 【Spring源码分析系列】搭建Spring实现容器的基本实现

    前言 bean是Spring中最核心的东西,因为Spring就像一个大水桶,而bean就像是容器中的水,先新建一个小例子来看一下: 一.使用eclipse构建项目,项目结构如下 二.类文件内容 < ...

  9. chorme 浏览器记住密码后input黄色背景处理

    使用chrome浏览器选择记住密码的账号,输入框会自动加上黄色的背景,有些设计输入框是透明背景的,需要去除掉这个黄色的背景: 方法1:阴影覆盖 input:-webkit-autofill { -we ...

  10. sencha touch 类的使用

    sencha touch 有一套自己的类机制,可以以面向对象的方式去写代码,封装业务逻辑,sencha touch 的组件.插件.api等都建立在这一套类机制的上面 在实际开发中,我们需要遵循这一套机 ...