首先让我们将这个问题简化为整数而不是实数,否则我们将无法获得快速优化算法.例如,让我们将所有数字乘以100,然后将其四舍五入为下一个整数.所以说我们有项目大小x1,…,xn和目标大小Y.我们想要最小化该值

k1 x1 + … + kn xn – Y

在这种条件下

(1) ki is a non-positive integer for all n ≥ i ≥ 1

(2) k1 x1 + … + kn xn – Y ≥ 0

一个简单的算法就是问一系列问题

>我们能达到k1 x1 … kn xn = Y 0吗?

>我们能达到k1 x1 … kn xn = Y 1吗?

>我们能达到k1 x1 … kn xn = Y z吗?

>等随着z的增加

直到我们得到答案“是”.所有这些问题都是Knapsack问题的实例,权重设置等于项目的值.好消息是,如果我们可以为z建立上限,我们可以立即解决所有这些问题.很容易证明存在z≤Y的解,除非所有xi都大于Y,在这种情况下解决方案只是选择最小的xi.

所以让我们使用pseudopolynomial dynamic programming approach来解决背包:让f(i,j)为1,如果我们可以使用前i项(x1,…,xi)达到总项目大小j.我们已经复发了

f(0,0) = 1

f(0,j) = 0 for all j > 0

f(i,j) = f(i - 1, j) or f(i - 1, j - x_i) or f(i - 1, j - 2 * x_i) ...

我们可以在O(n * Y)时间和O(Y)空间中解决这个DP阵列.结果将是第一个j≥Y,其中f(n,j)= 1.

有一些技术细节留给读者练习:

>如何在Java中实现它>如果需要,如何重建解决方案.这可以使用DP阵列在O(n)时间内完成(但是我们需要O(n * Y)空间来记住整个事物).

java数字不等于_java – 仅使用set中的数字查找等于或大于给定目标的总和相关推荐

  1. html中写自增数字,WPS word中数字怎么自增 如何在word中设置数字的千位分隔符

    选中某行,列或者某一部分,选择菜单栏的"行和列"->"填充"选项,选择序列选项. 在弹出的窗口中设置你需要的选项. WPS文字怎样自动增加数字 如何在WP ...

  2. java数字计算结果_Java编写程序之输入一个数字实现该数字阶乘的计算

    需求说明: 编写Java程序,输入一个数字,实现该数字阶乘的计算.一个数字的阶乘是所有小于及等于该数的正整数的积,自然数n的阶乘写作n! .例如,5的阶乘等于1*2*3*4*5,表示为5! = 120 ...

  3. excel复制数字乱码_仅在Excel中复制数字

    excel复制数字乱码 Someone emailed me recently, asking how to copy just the numbers, from a column that als ...

  4. python中数字应该用什么表示_8.python中的数字

    python中数字对象的创建如下, a = 123b= 1.23c= 1+1j 可以直接输入数字,然后赋值给变量. 同样也可是使用类的方式: a = int(123) b= float(1.23) c ...

  5. python正则表达式提取数字比较好_python正则表达式从字符串中提取数字的思路详解...

    python从字符串中提取数字 使用正则表达式,用法如下: ## 总结 ## ^ 匹配字符串的开始. ## $ 匹配字符串的结尾. ## \b 匹配一个单词的边界. ## \d 匹配任意数字. ## ...

  6. c语言一个整数各位数字个数_C语言实现把字符串中的数字转换成整数

    ===Tips:点击上方 蓝字 关注并查看历史消息===   本题实现的功能是把字符串中的数字提取转换成整型数字,例如:若输入字符串"ab56cd87",则输出结果:以%d格式输出 ...

  7. python数字大小排列_python按照列表元素中的数字大小排序

    [Human Sorting] 常见的python排序只需要一个sort或者sorted函数即可.但是默认采用的是字典序,这会带来一个问题,如果列表中的元素是字符串+数字组合,往往无法得到我们想要的排 ...

  8. python字符串提取数字并求和_python实现将字符串中的数字提取出来然后求和

    因工作原因,很久没有学习python知识了,感觉都快忘记了,前天看到一个练习题,如何将字符串中的数字提取出来,然后求和呢?下面我来解释一下如何通过python代码来实现. 题目:字符串43...3y2 ...

  9. oracle 判断数字是否为整数,怎么判断JS中一个数字是否为整数?

    怎么判断JS中一个数字是否为整数? 面试的时候遇到的问题,然后小疯回去查就几种方法,姑且一看,请多指正. 方法一: var ss =$("#ss").val(); var sss ...

最新文章

  1. 为什么说比特币的交易属性优于储值属性
  2. ad域时间源配置_Windows网络服务与配置管理之活动目录学习
  3. SqlServer sa 用户登录失败的解决方法
  4. python 魔法参数*argv 和 **kw
  5. Firefox、Chrome 盘助手
  6. sql 统计节点和子节点下面的数量_一次900万+数据量的 SQL 查询优化分析「上百倍性能优化」...
  7. 智能优化算法(源码)-飞蛾扑火优化算法(MFO)
  8. Python编程学习笔记:列表
  9. 深入解读Linux内存管理系列(7)——伙伴系统
  10. 空间可能与时间一样,也是不可逆转的
  11. html仿excel冻结 css,如果做类似Excel 冻结首列的效果_html/css_WEB-ITnose
  12. 自己组装的台式电脑怎么安装系统教学
  13. 怎么隐藏计算机磁盘分区,如何隐藏硬盘分区 隐藏磁盘分区
  14. 9步搞定:用迅雷等工具下载百度网盘资源
  15. 自媒体新手经常犯,自媒体平台发布作品没收益?分析了这5个原因
  16. 如何给PDF文件添加书签及子书签
  17. SQL之case when then用法(用于分类统计)
  18. 微信开通状态检测工具(免验证码版)运行原理
  19. chrome和Firefox浏览器如何访问非安全端口站点
  20. 自动化测试之 ddt 驱动 excel 文件

热门文章

  1. LetCode-MSSQL销售分析-I
  2. jni c java互相调用_通过JNI实现Java和C++的相互调用
  3. springcloud gateway 使用nacos 作为配置中心 和 注册中心
  4. 【Can not lock the registry cache file】同一台机器部署多个dubbo应用(配置文件相同)
  5. http 请求头 header Referer 含义和作用
  6. 字符串类中的StringBuffer,StringBuilder
  7. Java之Collections.emptyList()、emptySet()、emptyMap()的作用和好处以及要注意的地方。
  8. just for rest~
  9. mybatis TypeHandler 类型处理器
  10. 【OS学习笔记】三十六 保护模式十:通过中断发起任务切换----中断任务