首页 > 用户发贴区 > 编程问题提问区 > 高手来救命啊
2007
07-06

求C的程序,在网上找到了点,都不对.哪位大大帮我解解疑


感激不尽


[问题描述]
有一个箱子容量为v(正整数,o≤v≤20000),同时有n个物品(o≤n≤30),每个物品有一个体积 (正整数)。要求从m个物品中,任取若千个装入箱内,使箱子的剩余空间为最小。

[
样例]
输入: 24 –个整数,表示箱子容量

6
一个整数,表示有n个物品
8
接下来n行,分别表示这n个物品的各自体积。
3
12
7
9
7
输出: 0 一个整数,表示箱子剩余空间。


高手来救命啊》有 1 条评论

  1. xstar 说:

    一个组合问题,下面是一个找出所有解的思路。
    以为物品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]

留下一个回复