洛谷P4138 挂饰 背包
正解:背包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 挂饰 背包的更多相关文章
- 洛谷 P1858 多人背包 DP
目录 题面 题目链接 题目描述 输入输出格式 输入格式 输出格式 输入输出样例 输入样例 输出样例 说明 思路 AC代码 题面 题目链接 洛谷 P1858 多人背包 题目描述 求01背包前k优解的价值 ...
- [洛谷P1858] 多人背包
洛谷题目链接:多人背包 题目描述 求01背包前k优解的价值和 输入输出格式 输入格式: 第一行三个数K.V.N 接下来每行两个数,表示体积和价值 输出格式: 前k优解的价值和 输入输出样例 输入样例# ...
- 【BZOJ4247】挂饰 背包
[BZOJ4247]挂饰 Description JOI君有N个装在手机上的挂饰,编号为1...N. JOI君可以将其中的一些装在手机上. JOI君的挂饰有一些与众不同——其中的一些挂饰附有可以挂其他 ...
- 【bzoj4247】挂饰 背包dp
题目描述 JOI君有N个装在手机上的挂饰,编号为1...N. JOI君可以将其中的一些装在手机上. JOI君的挂饰有一些与众不同——其中的一些挂饰附有可以挂其他挂件的挂钩.每个挂件要么直接挂在手机上, ...
- bzoj4247: 挂饰(背包)
4247: 挂饰 题目:传送门 题解: 看完题目很明显的一道二维背包(一开始还推错了) 设f[i][j]表示前i个挂饰选完(可以有不选)之后还剩下j个挂钩的最大值(j最多贡献为n) 那么f[i][j] ...
- BZOJ 4247 挂饰 背包DP
4247: 挂饰 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/problem.php?id ...
- bzoj4247: 挂饰(背包dp)
4247: 挂饰 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 1136 Solved: 454[Submit][Status][Discuss] ...
- 洛谷 P1858 多人背包
求01背包前k优解的价值和 输入输出格式 Input/output 输入格式:第一行三个数K.V.N(k<=50,v<=5000,n<=200)接下来每行两个数,表示体积和价值输出格 ...
- 【洛谷】【动态规划/背包】P1417 烹调方案
由于你的帮助,火星只遭受了最小的损失.但gw懒得重建家园了,就造了一艘飞船飞向遥远的earth星.不过飞船飞到一半,gw发现了一个很严重的问题:肚子饿了~ gw还是会做饭的,于是拿出了储藏的食物准备填 ...
随机推荐
- 邮件服务器日志:/var/log/maillog
/var/log/maillog会记录包含系统上运行的邮件服务器的日志信息,比如记录 postfix 或 sendmail 运行时的日志信息 [root@localhost ~]# tail /var ...
- 安装.NET Framework 3.5
https://www.microsoft.com/zh-CN/download/details.aspx?id=22 https://docs.microsoft.com/zh-cn/dotnet/ ...
- N76E003之IAP
修改FLASH数据通常需要很长时间,不像RAM那样可以实时操作.而且擦除.编程或读取FLASH数据需要遵循相当复杂的时序步骤.N76E003提供方便FALSH编程方式,可以帮助用户通过IAP方式,重新 ...
- 《C++ Primer Plus》16.1 string类 学习笔记
16.1.1 构造字符串程序清单16.1使用了string的7个构造函数.程序清单16.1 str1.cpp---------------------------------------------- ...
- Android学习之BitMap用法实例
下面简单说明了BitMap的用法: 从服务器下载一张图片,显示在ImageView控件上,并将该图片保存在移动设备的SD上. // 根据网络URL获取输入流 public InputStream ge ...
- U盘安装centos6.4:缺少iso 9660映像
方法: 1.下载安装的ISO文件 到www.centos.org网站下载对应的Centos 6.4安装文件.下载站点我一般选择网易镜像站点 64位下载参考链接:http://mirrors ...
- 原生js--类、原型、构造函数
1.类和原型:原型对象是类的核心,类的所有实例都从同一个原型上继承属性和方法,原型对象是类的唯一标识 2.类和构造函数:构造函数通过new关键字来创建对象,构造函数的prototype属性被用作新对象 ...
- sencha touch TabPanel 加入导航按钮(向左向右按钮) 以及Carousel插件(2014-11-7)
Carousel插件代码: /* * TabPanel的Carousel功能插件 * 取至 * https://github.com/VinylFox/Ext.ux.touch.SwipeTabs * ...
- 替换linux系统文件etc下passwd文件的字段获取真正的root权限
sudo与root 很多人都知道使用linux可以利用sudo来执行一些root权限执行的事情,但是sudo和root还是有很大的区别的. 区别一:sudo可以执行的命令是root账户利用/etc/s ...
- 使用jetty的continuations实现"服务器推"
在实际的开发中,我们可能会有这样的场景:许多客户端都连接到服务器端,当有某个客户端的消息的时候,服务器端会主动"推"消息给客户端,手机app的推送是一个典型的场景(IOS的推送都是 ...