明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2137|回复: 6

有一个箱子容量为v(正整数,o≤v≤20000),同时有n个物品(o≤n≤30),每个物品有一个

[复制链接]
发表于 2012-7-21 10:17:22 | 显示全部楼层 |阅读模式
描述 Description   
     有一个箱子容量为v(正整数,o≤v≤20000),同时有n个物品(o≤n≤30),每个物品有一个体积 (正整数)。要求从 n 个物品中,任取哪几个个装入箱内,使箱子的剩余空间为最小。
用lisp怎么个做法,各位大侠帮忙!谢谢。。。。。

点评

去搜索“装箱算法”!  发表于 2012-7-21 10:59
 楼主| 发表于 2012-7-21 10:39:50 | 显示全部楼层
顶下,别沉了
发表于 2012-7-21 11:09:18 | 显示全部楼层
lilq_78 发表于 2012-7-21 10:39
顶下,别沉了

http://www.zxbc.cn/html/20070424/7490.html
 楼主| 发表于 2012-7-21 13:47:36 | 显示全部楼层
本帖最后由 lilq_78 于 2012-7-21 13:53 编辑

#include<iostream>
#include<cstring>
using namespace std;
int v,n;
int volume[31];//存储n件物品的体积
int h[20001];//h=1,表示n件物品通过某种组合,所构成的体积和正和等于i;
             //h=0,表示n件物品无论如何组合,体积和都无法等于i
int main()
{
     freopen("in.txt","r",stdin);
     freopen("out.txt","w",stdout);
     int v,n,i,j,k;
     while(cin>>v>>n)
      {
          for(i=1;i<=n;i++)
           cin>>volume;                        //输入
          memset(h,0,sizeof(h));               //初始化
          h[0]=1;
          for(i=1;i<=n;i++)
           for(k=v;k>=volume;k--)
            h[k]=h[k]||h[k-volume];
          j=v;
          while(j>0&&h[j]==0)
            j--;
          cout<<v-j<<endl;     
      }   
     return 0;
}     

 楼主| 发表于 2012-7-21 13:52:08 | 显示全部楼层
本帖最后由 lilq_78 于 2012-7-23 13:28 编辑
Gu_xl 发表于 2012-7-21 11:09
http://www.zxbc.cn/html/20070424/7490.html


#include<iostream>
#include<cstring>
using namespace std;
int v,n;
int volume[31];//存储n件物品的体积
int h[20001];//h=1,表示n件物品通过某种组合,所构成的体积和正和等于i;
             //h=0,表示n件物品无论如何组合,体积和都无法等于i
int main()
{
     freopen("in.txt","r",stdin);
     freopen("out.txt","w",stdout);
     int v,n,i,j,k;
     while(cin>>v>>n)
      {
          for(i=1;i<=n;i++)
           cin>>volume;                        //输入
          memset(h,0,sizeof(h));               //初始化
          h[0]=1;
          for(i=1;i<=n;i++)
           for(k=v;k>=volume;k--)
            h[k]=h[k]||h[k-volume];
          j=v;
          while(j>0&&h[j]==0)
            j--;
          cout<<v-j<<endl;     
      }   
     return 0;
}     

C没学好,程序看不太明白,请教一下
h[k]=h[k]||h[k-volume];

求逻辑或值,就是等于0或1这个意思吧,这个程序在这里是怎么计算的,不明白。
能不能详细说说
 楼主| 发表于 2012-7-23 13:28:46 | 显示全部楼层
顶,求高手指点
 楼主| 发表于 2012-7-31 16:12:15 | 显示全部楼层
解决了,谢谢

点评

解决了何不发上来与众分享?  发表于 2012-7-31 16:26
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-6-8 04:03 , Processed in 0.169563 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表