求C的程序,在网上找到了点,都不对.哪位大大帮我解解疑
感激不尽
[问题描述]
有一个箱子容量为v(正整数,o≤v≤20000),同时有n个物品(o≤n≤30),每个物品有一个体积 (正整数)。要求从m个物品中,任取若千个装入箱内,使箱子的剩余空间为最小。
[样例]
输入: 24 –个整数,表示箱子容量
6 一个整数,表示有n个物品
8 接下来n行,分别表示这n个物品的各自体积。
3
12
7
9
7
输出: 0 一个整数,表示箱子剩余空间。
>> 本文固定链接: http://www.vcgood.com/archives/1701
一个组合问题,下面是一个找出所有解的思路。
以为物品n的范围是 0 <= n <= 30,所以设计用一个int值来表示哪几个物品被选择了,(int值有31位有效数值位,使用其中的30位,每位上1表示该物品被选择了)
大致的代码如下,自己完善一下!
[code]
const int mark = 2^30 + 1;
int i = 0;
int arr[num] = {...};
for ( i = 0; i <= mark; i++ ){
for ( j = 0; j < num, j++ ) { //共有num个物品
sum = 0;
if( test(i, j) ) { //测试物品是否选上了,即测试相应的位是否为1.
sum += arr[ j ]; //是则相加
}
if ( sum == g_sum ) {
// 等于指定的容量,则输出
}
}
}
[/code]