正解:背包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. Cesium加载影像和地形数据+开启高程遮挡效果+视点定位+定时更新

    // 初始化Cesium var viewer = new Cesium.Viewer('cesiumContainer', { /*imageryProvider : new Cesium.ArcG ...

  2. C语言char*字符串数组和unsigned char[]数组的相互转换

    #include <iostream> #include <string> using namespace std; void convertUnCharToStr(char* ...

  3. linux系统抓包命令

    IP地址抓包:tcpdump -i any host 1.1.1.2 -n 端口抓包: tcpdump -i any port 6789 -n wireshak工具抓包:tcp.port == 678 ...

  4. windows 命令行下 简单好用的查看端口占用情况的方法

    在windows命令行窗口下执行: C:\>netstat -aon|findstr "4444" TCP 127.0.0.1:4444 0.0.0.0:0 LISTENIN ...

  5. 设置ADB网络连接目标板

    adb connect 网络连接目标板报错,原因参考[http://ytydyd.blog.sohu.com/146260552.html].而且指定 adb connect <IP>:5 ...

  6. JS 实现拖动效果

    <html> <body style="margin:0px;"> <script src="http://ajax.googleapis. ...

  7. android linphone中opengl显示的实现

    1,java层 在界面中创建GL2JNIView(基类为GLSurfaceView). 创建对象AndroidVideoWindowImpl,将GL2JNIView作为参数传入构造函数.在该对象中监听 ...

  8. sencha touch 分享到微博扩展

    扩展代码: /* *分享到微博 */ Ext.define('ux.WeiboPicker', { extend: 'Ext.Picker', xtype: 'weiboPicker', config ...

  9. X-Requested-With导致CSRF失败

    在漫漫渗透之路中,眼前一亮的发现一个站.Referer字段没有检查,POST参数中的动态token也没有检查,这不是带一波CSRF的节奏嘛.但是遇到一个之前我没遇到的问题导致我CSRF失败,这个问题或 ...

  10. kafka 的quick start(windows平台)

    h1, h2, h3, h4, h5, h6, p, blockquote { margin: 5px; padding: 5; } body { font-family: "Helveti ...