01背包问题变种:从给定的N个正数中选取若干个数之和最接近M的JAVA写法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了01背包问题变种:从给定的N个正数中选取若干个数之和最接近M的JAVA写法相关的知识,希望对你有一定的参考价值。

要写出可执行的代码,谢谢

参考技术A BIAS0:= (C-MA(C,2))/MA(C,2)*100;
BIAS1 := (C-MA(C,12))/MA(C,12)*100;
BIAS2 := (C-MA(C,26))/MA(C,26)*100;
BIAS3 := (C-MA(C,48))/MA(C,48)*100;
HXL:=V/CAPITAL*100;
D1:=INDEXC;
D2:=MA(D1,56);
DR2:=D1/D2<0.94;
E1:=(C-HHV(C,12))/HHV(C,12)*10;
E2:=(C-REF(C,26))/REF(C,26)*10;追问

这是啥

参考技术B 01背包问题变种:从给定的N个正数中选取若干个数之和最接近M的JAVA写法 参考技术C 这是一个纯数学问题,刚好上两天有同事问我这个问题,再网上找的,希望对你有用。
https://blog.csdn.net/u014624241/article/details/52925518
背景: 
现在的生活,越来越看重算法,有一天开了很多票,却只报了一部分; 
也忘了报了几张,原来也不照相,只记了一个数, 
算了,写个程序吧,一个一个试呗,递归算法; 
代码就不粘贴了,自己去看吧。
参考技术D 我只想要再复制。

从1-n个数取若干个数,使和为m,问多少种情况

其实运用了背包问题的思想,假设对这个问题建立了函数:f(m,n)

 从n个数中取:有两种情况

               n不在这若干个数中,f(m,n-1)

              n在这若干个数中,f(m-n,n-1)

所以 f(m,n)=f(m,n-1)+f(m-n,n-1)

根据上式,应用递归的思想,编程如下:

public class Test1 {
public static void main(String[] args) throws Exception {
    Test1 test=new Test1();
   System.out.println(test.fun(6,5));            
 
}
public int fun(int m,int n){
     if(n<1||m<1) {
        
      return  0;
        
     } if(m<n) {//如果最大值为m
         n=m;
         return fun(m,m-1)+1;
        
     }if(m==n|m==1) {
         return 1;
     }
    return fun(m,n-1)+fun(m-n,n-1);
}
}

以上是关于01背包问题变种:从给定的N个正数中选取若干个数之和最接近M的JAVA写法的主要内容,如果未能解决你的问题,请参考以下文章

背包问题 codevs2210 数字组合

动态规划之完全背包详解

1268 完全背包问题

最大报销额 ~01背包

poj 1837 天平问题(01背包变种)

HDU 5234 Happy birthday --- 三维01背包