正解:背包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. pyinstaller 将.py生成.exe ----报错 “IndexError: tuple index out of range”

    pyinstaller将py打包为exe文件,用pysintaller居然报错 File "c:\anaconda3\lib\site-packages\PyInstaller\depend ...

  2. QT显示中文 连接上文

    1.首先是建立Linux开发环境1.1.在windowsXP下安装博创公司提供的虚拟机软件VMware Workstation,版本为VMware-workstation-full-7.0.1-227 ...

  3. Github上star和fork比较高的vim配置方案

    https://github.com/amix/vimrchttps://github.com/humiaozuzu/dot-vimrchttps://github.com/spf13/spf13-v ...

  4. Web负载均衡与分布式架构

     参考帖子: Web负载均衡的几种实现方式 大型网站架构系列:负载均衡详解(上) DNS 原理入门 解决nginx负载均衡的session共享问题 什么是消息队列 Java应用架构的演化之路 Java ...

  5. C# GIF图片的分解以及合成

    dll下载的地址 http://www.codeproject.com/Articles/11505/NGif-Animated-GIF-Encoder-for-NET   使用主要调用的是Compo ...

  6. SqlServer中循环查询结果集

    ); begin ; open c_test_main;--打开游标 --开始循环 begin fetch next from c_test_main into @id,@value; --赋值到变量 ...

  7. linux中根目录下各个目录的作用

    /bin 二进制可执行命令.该目录下存放着普通用户的命令 /dev 系统的设备文件,即设备的驱动程序 /home 用户主目录的基点 /lost-found 这个目录平时是空的,当系统非正常关机而留下的 ...

  8. Android NDK学习(3)使用Javah命令生成JNI头文件 .

    转:http://www.cnblogs.com/fww330666557/archive/2012/12/14/2817387.html 第一步: 在Eclipse中创建android项目,并声明N ...

  9. GOOGLE CODE ANDROID 开源项目 集合

    转:http://blog.csdn.net/dellheng/article/details/7163333 1.        ZXing  http://code.google.com/p/zx ...

  10. Android与互联网的交互方式有三种

    数据下载:下载网络上的的数据,包括图片.代码文本.XML文件.JSON数据,音/视频等大文件,调用webservice. 数据上传:上传图片.文本.XML.JSON数据.音/视频文件,调用webser ...