UVa12325 宝藏
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.4亿围观!宝藏副教授火速走红:如果不喜欢我的研究方向,我可以改!
点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 "叫我'小邹'就行, 如果不喜欢我的研究方向, 我可以改& ...
- 竞赛比完,代码、模型怎么处理?Kaggle 大神:别删,这都是宝藏
选自 | medium 作者 | Vladimir Iglovikov 转自 | 机器之心 那些被遗忘的竞赛项目代码.权重可能也是一笔宝藏. 很多人可能参加过许多比赛,做过许多项目,但比赛或项目结束之 ...
- 值得推荐!安利8个小众好用的宝藏工具,解决各种需求
推荐8个小众好用的宝藏工具,可以解决你很多需求,每个都很好用,喜欢的话别忘记点赞哦~ 1.今日热榜 今日热榜是一个高质量的追热点工具,聚合了大量网站的热榜,包含综合类.科技类.娱乐类.社区类.购物类. ...
- 宝藏索引图出炉!一图在手,文章全拥有!
亲爱的粉丝们,在看数据派THU(以及其他公众号)文章时你是否曾有以下的困扰? 碰运气--每天发布什么类型的文章其实并没有规律可循: 好茫然--自己关注的内容也不知道什么时候会发布: 心好累--想学习一 ...
- Kaggle大神:竞赛代码别删,这都是宝藏
点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 选自medium 作者:Vladimir Iglovikov 机器之心编译 那些被遗忘 ...
- 微信小程序超级占内存_6款宝藏微信小程序,简单又实用,节约内存就靠它了...
目前手机对生活的影响越来越重要,各种APP在生活中扮演着极其重要的角色.但是随着APP功能的增多,所占内存也是越来越大,很多手机都在超负荷运行,这样对手机的使用寿命会大大折损.最开始了解微信小程序是里 ...
- 实用 | 宝藏男孩教你如何魔改 Grafana 主题!
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 米开朗基杨 来源 | 公众号「云原生实验室」 ...
- 『宝藏 状态压缩DP NOIP2017』
宝藏(NOIP2017) Description 参与考古挖掘的小明得到了一份藏宝图,藏宝图上标出了 n 个深埋在地下的宝藏屋, 也给出了这 n 个宝藏屋之间可供开发的m 条道路和它们的长度. 小明决 ...
- mvd没什么每次参数双都多一个逗号_学服装设计后,家里多了哪些奇怪又可爱的宝藏物品?...
如果你身边有一个学习服装设计的小伙伴 你会发现他的家里 和你想象的完全不一样~ 你以为他们会时尚.干练.极简 实际上 他们更可能生活在花花绿绿.热闹又复杂的"仓库"里 好多学服装设 ...
最新文章
- Spring AOP 面向切面编程相关注解
- servlet实现http通信基础
- js 获取字符串中的中文
- [3]MVC3中使用Telerik(转)
- Windows 8 系列 --Block Game --随笔
- python cnn_使用python中pytorch库实现cnn对mnist的识别
- 二进制_简单了解二进制
- 你必须懂的Java对象引用
- Linux下c程序的编译方法:
- jsp中的九大内置对象和四大作用域
- putty中文版 v0.61中文绿色软件
- 模式识别与机器学习(国科大2021-2022秋季学期课程)-基础概念及算法
- HTML基础学习(菜鸟教程和W3school参考手册)
- bootloader recovery
- 国美易卡利用数据挖掘技术,国美易卡精准分析决策
- 风控中消费信贷板块的英文词汇
- ITK (1)窗宽窗位的意义与设置
- FFT幅度谱为什么不对,需要较正
- Erasure code 代替RAID的案例
- 光纤熔接操作顺序步骤简介