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写法的主要内容,如果未能解决你的问题,请参考以下文章