Uva12325 Zombie's Treasure Chest [二分区间+模拟退火]

Zombie’s Treasure Chest

题目链接

https://cn.vjudge.net/problem/UVA-12325

题意

两种物品无穷多个,第一种物品重量s1s_1s1,价值v1v_1v1,第二种物品重量s2s_2s2,价值v2v_2v2,背包重nnn,求能装的最大价值之和. 数据全都是2e92e92e9.也就是两种物品的完全背包.

题解

不可思议吧,这题还能模拟退火?

但仔细一想,求解最优值,而且随机解的生成也很简单,当然可以吗,模拟退火搞啦.

模拟退火的板子可以到我以前的博客里找到,现在默认大家都知道模拟退火怎么写了.

这道题我虽然用模拟退火AAA掉了,但也尝试了好多发,现在把我采坑的过程根大家分享一下.

尝试一

直接套板子,设xxx为第一种物品取的个数,显然x∈[0,⌊ns1⌋]x \in [0,\lfloor \frac{n}{s_1} \rfloor]x[0,s1n],那么第二种物品的个数就是y=⌊n−s1∗v1s2⌋y =\lfloor \frac{n-s_1*v_1}{s_2} \rfloory=s2ns1v1.

因此模拟退火的时候我可以在区间[0,⌊ns1⌋][0,\lfloor \frac{n}{s_1} \rfloor][0,s1n]中随机一个数作为xxx,然后计算yyy,并且计算能量值E=x∗v1+y∗v2E = x*v_1+y*v_2E=xv1+yv2.

最后调调参数,使得平衡一下答案精度和时间复杂度.

尝试结果

多次尝试以后,一直WA,自己造了组极端数据2000000000,2,3,1,12000000000,2,3,1,12000000000,2,3,1,1,发现根本过不去,总结原因:当随机区间过大的时候,很难随机到正确解,所以算法就在某个半山腰停住了.

尝试二

要想能想要枚举到最优解,区间一定不能太大.我们可以分块进行模拟退火,这样可以保证每次随机的区间不会太大,区间上的某一个点被随机到的概率就更大了,这种做法我还没有试过,但是感觉应该可行.我们进一步发现,这个函数的峰不会太多(实际没几个)大致是具有单调性质的,因此我们采用二分区间的做法,即对于当前区间,用模拟退火算出一个最优解,然后用这个解与区间中点做比较从而确定下一个需要进行模拟退火的区间.

通过多次调参之后:

代码

#include <iostream>
#include <algorithm>
#include <cmath>
#include <ctime>
#include <cstring>
int T,cas;
long long n,s1,v1,s2,v2;
double randfloat() {return rand()/(RAND_MAX+0.0);
}
void solve() {std::cin >> n >> s1 >> v1 >> s2 >> v2;long long ansE = 0,ansx = 0;long long nowE = 0,x = 0;long long low = 0,up = n/s1;for(int cc = 1;cc <= 20;++cc) {double T0 = 1000000,Tk = 1,T = T0,d = 0.999;while(T > Tk) {long long newx = low + rand()%(up-low+1);long long newE = newx * v1 + ((n-newx*s1)/s2)*v2;if(newE < nowE  || randfloat() > exp((nowE-newE)/T)) {nowE = newE;x = newx;}T *= d;if(newE > ansE) {ansE = newE;ansx = newx;}}long long mid = (low + up)/2;if(ansx > mid) low = mid;else up = mid;}std::cout << "Case #" << ++cas << ": " << ansE << std::endl;
}
int main() {std::ios::sync_with_stdio(false);std::cin >> T;while(T--) solve();return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/320951.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Identity Server 4 预备知识 -- OpenID Connect 简介

我之前的文章简单的介绍了OAuth 2.0 (在这里: 要用Identity Server 4 -- OAuth 2.0 超级简介, 还不是很全.这篇文章我要介绍一下 OpenID Connect.OAuth 2.0 不是身份认证协议OAuth 2.0 不是身份认证(Authentication)协议. 为什么有人会认为OAuth 2.0具有身份认证的功能? 这是因…

Ocelot.JwtAuthorize:一个基于网关的Jwt验证包

Ocelot作为基于.net core的API网关&#xff0c;有一个功能是统一验证&#xff0c;它的作用是把没有访问权限的请求挡在API网关外面&#xff0c;而不是到达API网关事端的API时才去验证&#xff1b;之前我有一篇博文Ocelot统一权限验证&#xff0c;作过说明&#xff0c;这篇博文说…

【并查集】小 X 的液体混合

小 X 的液体混合 题目大意&#xff1a; 在一个玻璃瓶里&#xff0c;放入一些液体&#xff0c;某一对液体放在一起会有反应&#xff0c;当某个液体有反应时危险度就会乘2&#xff08;初值为1&#xff09;&#xff0c;问危险度最大是多少 原题&#xff1a; 解题思路&#xff1…

Swagger如何访问Ocelot中带权限验证的API

先亮源代码&#xff1a;https://github.com/axzxs2001/Asp.NetCoreExperiment/tree/master/Asp.NetCoreExperiment/SwaggerDemo这篇博文不是对asp.net core中使用Swagger作介绍&#xff0c;因为社区博客作了详细说明。今天主要说一下Swagger在Ocelot网关权限验证模式下的访问&a…

etcd-workbench一款免费好用的ETCD客户端,支持SSHTunnel、版本对比等功能

介绍 今天推荐一款完全免费的ETCD客户端&#xff0c;可以私有化部署: etcd-workbench 开源地址&#xff1a;https://github.com/tzfun/etcd-workbench Gitee地址&#xff1a;https://gitee.com/tzfun/etcd-workbench 下载 本地运行 从 官方Release 下载最新版的 jar 包&am…

深度学习中反向传播算法简单推导笔记

反向传播算法简单推导笔记 1.全连接神经网络 该结构的前向传播可以写成: z(1)W(1)xb(1)z^{(1)} W^{(1)}xb^{(1)}z(1)W(1)xb(1) a(1)σ(z(1))a^{(1)} \sigma(z^{(1)})a(1)σ(z(1)) z(2)W(2)a(1)b(2)z^{(2)}W^{(2)}a^{(1)}b^{(2)}z(2)W(2)a(1)b(2) a(2)σ(z(2))a^{(2)} \sigm…

EntityFramework Core进行读写分离最佳实践方式,了解一下(二)?

写过上一篇关于EF Core中读写分离最佳实践方式后&#xff0c;虽然在一定程度上改善了问题&#xff0c;但是在评论中有的指出更换到从数据库。那么接下来要进行插入此时又要切换到主数据库&#xff0c;同时有的指出是否可以进行底层无感知操作&#xff0c;这确实是个问题&#x…

一文搞清到底什么是 .NET?

现在各种 .NET 满天飞&#xff0c;别说新手了&#xff0c;连我这样的老手都差点被绕进去。到底什么是 .NET 呢&#xff1f;通俗易懂&#xff0c;什么是.NET?什么是.NET Framework&#xff1f;什么是.NET Core? 这篇文章好长呀&#xff0c;不知道你看完了没有&#xff0c;其实…

Service Mesh新成员:Consul 1.2

本文译自 HashiCorp 官网关于 Consul 1.2 支持 Service Mesh 发布的博客文章。原文链接&#xff1a;https://www.hashicorp.com/blog/consul-1-2-service-mesh作者&#xff1a;Mitchell Hashimoto 翻译&#xff1a;董干 转载自&#xff1a;https://blog.idevfun.io/consul-1-2-…

VAE(变分自编码器)学习笔记

VAE学习笔记 普通的编码器可以将图像这类信息编码成为特征向量. 但通常这些特征向量不具有空间上的连续性. VAE(变分自编码器)可以将图像信息编码成为具有空间连续性的特征向量. 方法是向编码器和解码器中加入统计信息,即特征向量代表的的是一个高斯分布,强迫特征向量服从高…

小 X 的 AK 计划

小 X 的 AK 计划 题目大意&#xff1a; 有n个点&#xff0c;到一个点&#xff08;时间为距离&#xff09;并花一些时间可以A掉此点&#xff0c;问最多可以A多少个点 原题&#xff1a; 解题思路&#xff1a; 先按位置从小到大排序&#xff0c;然后到每一个点并A掉的时间加在…

.NET Core 2.1的重大缺陷延长了.NET Core 2.0的寿命

微软近日宣布&#xff0c;.NET Core 2.0 即将 "寿终正寝"&#xff0c;对它的支持将在2018年10月1日结束。.NET Core 2.0 是一个非长期支持&#xff08;LTS&#xff09;的版本&#xff0c;因此微软的承诺是在下一个版本发布的三个月之后结束对它的支持。由于 .NET Cor…

.Net Core开发日志——Global Tools

.Net Core 2.1引入了一个新的功能&#xff0c;Global Tools&#xff0c;其本质是包含控制台应用程序的nuget包&#xff0c;目前而言&#xff0c;还没有特别有用的工具&#xff0c;不过相信随着时间的推移&#xff0c;各种有创意或者实用性强的Global Tools会出现在大家的视野里…

Simple-Faster-RCNN源码学习笔记

Simple-Faster-RCNN 源码学习 项目github地址: https://github.com/chenyuntc/simple-faster-rcnn-pytorch 源码 源文件: model/utils/bbox_tools.py 方法: loc2bbox(src_bbox, loc) 参数含义: src_bbox描述的是bbox的坐标.loc表示的偏移(offsets)和缩放尺度(scales). 给…

API网关模式

什么是网关网关一词来源于计算机网络中的定义&#xff0c;网关(Gateway)又称网间连接器、协议转换器。网关的准确定义是&#xff1a; 两个计算机程序或系统之间的连接&#xff0c;网关作为两个程序之间的门户&#xff0c;允许它们通过不同计算机之间的协议通信来共享信息。顾名…

CVPR19 基于图卷积网络的多标签图像识别模型 论文笔记

笔记 旷视研究院的研究员提出了如下模型,用于图像的多标签分类. 该模型与一般模型不一样的一点是,它的分类器是生成的,因此它有一个专门生成分类器的子网络. 网络主要由两部分构成 特征表示子网络,该网络由ResNet-101构成,即蓝色框圈出的部分.分类器生成子网络,该网络由3个…

日行千里,全凭“车”况,为什么我们要升级平台

历经一个半月的时间&#xff0c;不管是叫工业互联网平台还是叫工业大数据平台&#xff0c;从1.0版本升级到2.0版本&#xff0c;升级部分包括&#xff1a;客户端&#xff08;网关&#xff09;、服务端&#xff08;数据接收、数据处理、计算服务&#xff09;、底层数据库结构、WE…

好代码是管出来的——.Net Core中的单元测试与代码覆盖率

测试对于软件来说&#xff0c;是保证其质量的一个重要过程&#xff0c;而测试又分为很多种&#xff0c;单元测试、集成测试、系统测试、压力测试等等&#xff0c;不同的测试的测试粒度和测试目标也不同&#xff0c;如单元测试关注每一行代码&#xff0c;集成测试关注的是多个模…

数字图像处理作业

图像处理作业 1 取sT(r)11(mr)EsT(r)\frac{1}{1(\frac{m}{r})^E}sT(r)1(rm​)E1​ 其中rrr为原始亮度&#xff0c;mmm为输入区间的中点&#xff0c;EEE描述曲线的陡峭程度 2 一幅8灰度级图像具有如下所示的直方图&#xff0c;求直方图均衡后的灰度级和对应概率&#xff0c;…

深港澳大湾区(深圳).NET技术交流会圆满成功

2018年7月7日一场以.NET Core微服务和机器学习为主题的交流会成功在深圳职业技术学院落下帷幕。这次活动在短短的一周时间内&#xff0c;报名人数超过了170人&#xff0c;除了一些同学临时有事&#xff0c;基本都到现场了&#xff0c;特别感谢深职院的软创工作室对这次活动的支…