UVa12325 宝藏

  • 前言
  • 一、什么情况下算是背包容量大而S1,S2小?
  • 二、使用步骤
    • 1.判断是否tot>S1*S2,如果是则求出n
    • 2.在背包容量为(tot-n*S1*S2)的条件下回溯
  • 总结

前言

看到这个题目的第一眼就觉得应该用回溯法,思路就是从S1开始放,递归结束后再放S2,递归结束的条件是当背包的剩余空间小于min(min=S1<S2?S1:S2)时,判断这条解答树路径上的价值之和是不是比全局变量ans大,大则赋值给ans,否则结束递归。但是这会有一个问题,当背包的容量大而S1和S2特别小时,如背包tot容量位100,S1为1,S2为2时会要进行很多次递归,浪费了很多的时间和空间资源,那么有什么办法解决呢?


一、什么情况下算是背包容量大而S1,S2小?

当背包容量tot>S1S2时,在这种情况下方便下一步计算,因为当tot>S1S2时,可以计算出tot最多大于多少个S1S2,假设用循环得出n个满足条件,则在这nS1S2的容量里,既可以装S1个V1也可以装S2个V2,而nS1S2=nS1S2,则假设当V1>V2时,nS1S2V1>nS1S2V2,那么接下来可以用回溯法计算在背包容量为(tot-nS1*S2)时的最大价值,此时不会因为前言里的问题而导致时间空间浪费。

二、使用步骤

1.判断是否tot>S1*S2,如果是则求出n

这一步可用for循环求出,代码如下(示例):

if (s[0] * s[1] < tot)for (n = 1; n * s[0] * s[1] < tot; n++);//或者去掉if,n从0开始循环

2.在背包容量为(tot-nS1S2)的条件下回溯

整体代码如下(示例):

int tot, s[2], v[2], ans = -1, mins;void dfs(int rest, int sum)
{if (rest < mins){if (sum > ans)ans = sum;return;}for (int i = 0; i < 2; i++)if (rest >= s[i])int main()
{int n = 0, ans1;scanf_s("%d", &tot);for (int i = 0; i < 2; i++)scanf_s("%d %d", &s[i], &v[i]);mins = s[0] < s[1] ? s[0] : s[1];if (s[0] * s[1] < tot)for (n = 1; n * s[0] * s[1] < tot; n++);tot -= n * s[0] * s[1];ans1 = n * (v[0] > v[1] ? v[0] : v[1]);dfs(tot, 0);printf("%d", ans + ans1);return 0;
}

总结

提示:因为网络原因没有在Uva上进行评测,只是在洛谷上试了一下样例并通过了,觉得这个想法很妙就先记录下来。

UVa12325 宝藏相关推荐

  1. 1.4亿围观!宝藏副教授火速走红:如果不喜欢我的研究方向,我可以改!

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 "叫我'小邹'就行, 如果不喜欢我的研究方向, 我可以改& ...

  2. 竞赛比完,代码、模型怎么处理?Kaggle 大神:别删,这都是宝藏

    选自 | medium 作者 | Vladimir Iglovikov 转自 | 机器之心 那些被遗忘的竞赛项目代码.权重可能也是一笔宝藏. 很多人可能参加过许多比赛,做过许多项目,但比赛或项目结束之 ...

  3. 值得推荐!安利8个小众好用的宝藏工具,解决各种需求

    推荐8个小众好用的宝藏工具,可以解决你很多需求,每个都很好用,喜欢的话别忘记点赞哦~ 1.今日热榜 今日热榜是一个高质量的追热点工具,聚合了大量网站的热榜,包含综合类.科技类.娱乐类.社区类.购物类. ...

  4. 宝藏索引图出炉!一图在手,文章全拥有!

    亲爱的粉丝们,在看数据派THU(以及其他公众号)文章时你是否曾有以下的困扰? 碰运气--每天发布什么类型的文章其实并没有规律可循: 好茫然--自己关注的内容也不知道什么时候会发布: 心好累--想学习一 ...

  5. Kaggle大神:竞赛代码别删,这都是宝藏

    点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 选自medium 作者:Vladimir Iglovikov 机器之心编译 那些被遗忘 ...

  6. 微信小程序超级占内存_6款宝藏微信小程序,简单又实用,节约内存就靠它了...

    目前手机对生活的影响越来越重要,各种APP在生活中扮演着极其重要的角色.但是随着APP功能的增多,所占内存也是越来越大,很多手机都在超负荷运行,这样对手机的使用寿命会大大折损.最开始了解微信小程序是里 ...

  7. 实用 | 宝藏男孩教你如何魔改 Grafana 主题!

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 米开朗基杨 来源 | 公众号「云原生实验室」 ...

  8. 『宝藏 状态压缩DP NOIP2017』

    宝藏(NOIP2017) Description 参与考古挖掘的小明得到了一份藏宝图,藏宝图上标出了 n 个深埋在地下的宝藏屋, 也给出了这 n 个宝藏屋之间可供开发的m 条道路和它们的长度. 小明决 ...

  9. mvd没什么每次参数双都多一个逗号_学服装设计后,家里多了哪些奇怪又可爱的宝藏物品?...

    如果你身边有一个学习服装设计的小伙伴 你会发现他的家里 和你想象的完全不一样~ 你以为他们会时尚.干练.极简 实际上 他们更可能生活在花花绿绿.热闹又复杂的"仓库"里 好多学服装设 ...

最新文章

  1. Spring AOP 面向切面编程相关注解
  2. servlet实现http通信基础
  3. js 获取字符串中的中文
  4. [3]MVC3中使用Telerik(转)
  5. Windows 8 系列 --Block Game --随笔
  6. python cnn_使用python中pytorch库实现cnn对mnist的识别
  7. 二进制_简单了解二进制
  8. 你必须懂的Java对象引用
  9. Linux下c程序的编译方法:
  10. jsp中的九大内置对象和四大作用域
  11. putty中文版 v0.61中文绿色软件
  12. 模式识别与机器学习(国科大2021-2022秋季学期课程)-基础概念及算法
  13. HTML基础学习(菜鸟教程和W3school参考手册)
  14. bootloader recovery
  15. 国美易卡利用数据挖掘技术,国美易卡精准分析决策
  16. 风控中消费信贷板块的英文词汇
  17. ITK (1)窗宽窗位的意义与设置
  18. FFT幅度谱为什么不对,需要较正
  19. Erasure code 代替RAID的案例
  20. 光纤熔接操作顺序步骤简介

热门文章

  1. php的usleep卡死linux,usleep() 有很大的问题
  2. 线程和线程间通信(C语言)
  3. gaetpy库模板sga_permut_templet简单应用
  4. 什么是数据库备份DBS
  5. 2008服务器系统ie,windows server 2008 IE增强的安全配置关闭方法
  6. SEO优化技术之关键字
  7. Linux内核中的IPSEC实现(3) ---转载
  8. 用OutLook发手机短信
  9. win10 x64下的DNW驱动不完全安装方法
  10. lvds单8转双8芯片_LVDS驱动芯片