背包算法练习--求小于某数字的数组最大和:

////背包算法练习--求小于某数字的数组最大和:

var bestS = {val:0,str:""};
var LIMIT ;

Array.prototype.sum = function(){
var s = 0;
for(var i = 0;i < this.length;i++){
s+= this[i];
}
return s;
}

function f(bagArr){
var arrS = bagArr.sum();
if(arrS < LIMIT){
bestS = arrS > bestS.val ? {val:arrS,str:bagArr.join(‘,‘)} : bestS;
return;
}

for(var i = 0;i<bagArr.length;i++){

var copyArr = new Array();
for(var j = 0;j < bagArr.length;j++){
copyArr.push(bagArr[j]);
}
copyArr.splice(i,1);

f(copyArr);

}

}

LIMIT = 197;
f(new Array(49,28,119,50,78,48,29,49,52));
console.log(bestS);

时间: 2024-10-06 18:51:35

背包算法练习--求小于某数字的数组最大和:的相关文章

信息安全-4:公钥密码体制之背包算法[原创]

转发注明出处:http://www.cnblogs.com/0zcl/p/6111686.html 前言 本来我是想学RSA算法的,但发现太难了,不是我能理解的,于是我先看教材前面的背包算法.不出意料的话会在下一篇博客介绍下RSA算法! 背包问题介绍: 给定一些物体,每个物体有不同的重量,是否有可能将这些物体放入一个背包,使背包的重量等于一个给定的值. 背包算法为第一个推广的公开密钥加密算法. 虽然后来发现这个算法不安全,但仍值得研究,因为它表示了如何将NP完全问题用于公开密钥算法(好吧,这个我

1105: 零起点学算法12——求2个日期之间的天数

1105: 零起点学算法12--求2个日期之间的天数 Time Limit: 1 Sec  Memory Limit: 64 MB   64bit IO Format: %lldSubmitted: 4404  Accepted: 1985[Submit][Status][Web Board] Description 水题 Input 输入2个日期,日期按照年月日,年月日之间用符号-隔开(题目包含多组数据) Output 求出这2个日期之间的天数(不包括自身),每组测试数据一行 Sample I

01背包算法的理解

01背包问题: 有N件物品和一个最大重量限制为V的背包.第i件物品的重量是c[i],价值是w[i].求解将哪些物品装入背包可使这些物品的重量总和不超过V,且价值总和最大.每个物品只有1份,且不可分割 看了01背包算法,言简意赅,但理解起来头昏脑胀,不得要领.尝试解释下对该算法的理解,加深记忆. 假设最优解已经存在,怎么判断一个物品i是否在背包里?  简单,只要知道, 1.c[i]是否大于V, 2.F[i-1][V-c[i]],即没有i物品的情况下,最大重量限制为V-c[i]的最优解. 3.F[i

&quot;求n个数字中的最大值&quot;的 多种方案,及对多种方案优缺点分析。

如果n是3,输入3个数字,求3个数的最大数: 第一种方案: 利用条件运算符来求解,条件运算符的格式是x?y:z x是boolean类型表达式,如果x=true, 则整个条件运算符的结果是y的值,否则是z的值.(((a>b)?a:b))就是得到a,b中的最大值. int a =1,b=2,c=3; int h=(((a>b)?a:b)<c)?c:(((a>b)?a:b)); System.out.println("最大的数字是"+h); 第二种方案: int a=

小算法:求一个数的乘方 - 使用递归

1 /** 2 * 求一个整数的乘方 3 * @param num 要乘方的数字 4 * @param power 多少次方 5 * @return 6 */ 7 public static int power(int num,int power){ 8 if(power == 1){ 9 return num; 10 } 11 if(power % 2 == 0){ 12 return power(num, power / 2) * power(num, power / 2); 13 }els

练习2:雨淋湿了一道题,9个数字只能看清楚4个,第一个肯定不是1 [X * (Y3 + Z)]^2 = 8MN9,求出各个数字

题目上的X代表的未知数,不一定是同一个数字. 其实这道题,直接一推敲答案就出来了,首先,积德尾数是9,说明 X*(Y3 + Z)的值尾数是3,3的因子只有1和3,所以X只有1和3候选,但是题目说第一个肯定不是1,那就是3了. 那么括号里面Y3+Z的值就必然尾数是1,而能和3相加尾数是1的只有8,所以Z就是8了.这样就还剩下Y的值了,平方等于8000+的数字,一想大概是在90左右, 这样子,括号里面(Y3+Z)的值大概就框定在30左右,肯定比30大,但绝对不超过35,由于之前已经判断出Z是8,所以

1103: 零起点学算法10——求圆柱体的表面积

1103: 零起点学算法10--求圆柱体的表面积 Time Limit: 1 Sec  Memory Limit: 128 MB   64bit IO Format: %lldSubmitted: 11616  Accepted: 1956[Submit][Status][Web Board] Description 很简单的问题,求圆柱体的表面积 Input 多组测试数据,每组输入底面半径r和高h Output 每组输出圆柱体的表面积,保留3位小数 Sample Input 3.5 9 Sam

1104: 零起点学算法11——求梯形面积

1104: 零起点学算法11--求梯形面积 Time Limit: 1 Sec  Memory Limit: 64 MB   64bit IO Format: %lldSubmitted: 6473  Accepted: 1875[Submit][Status][Web Board] Description 水题 Input 输入3个浮点数,分别表示上底.下底和高,中间用逗号隔开(题目包含多组数据) Output 输出梯形的面积,保留2位小数 Sample Input 2,4,5 Sample

数位dp(求1-n中数字1出现的个数)

题意:求1-n的n个数字中1出现的个数. 解法:数位dp,dp[pre][now][equa] 记录着第pre位为now,equa表示前边是否有降数字(即后边可不可以随意取,true为没降,true为已降):常规的记忆化搜索 代码: /****************************************************** * author:xiefubao *******************************************************/ #p