我有个很菜的问题(现在手头紧,将来会加分的)

chinamengnan 2001-07-11 09:13:56
有两艘货船,n个货箱。第一艘船的载重量是c1,第二艘船的载重量是c2,wi是货箱i的重量,且w1+w2+....+wn<=c1+c2。找出将n个货箱全部装船的方法。
最好给源代码。
谢谢!
...全文
90 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
anjun 2001-07-11
  • 打赏
  • 举报
回复
给你个面子,告诉你个优化算法

template<class T>class Loading
{
friend MaxLoading(T[],T,int);
private:
void maxLoading(int i);
int n;\\货箱数目
T *w,\\货箱重量数组
c,\\第一艘船的容量
cw,\\当前装载的重量
bestw,\\目前最优装载的重量
r;
};

template<class T>void Loading<T>::maxLoading(int i)
{
if(i>n)
{
if(cw>bestw)
bestw=cw;
return;
}
r-=w[i];
if(cw+w[i]<=c)
{
cw+=w[i];
maxLoading(i+1);
cw-=w[i];
}
if(cw+r>bestw)
maxloading(i+1);
r+=w[i];
}

template<class T>T Maxloading(T w[],T c,int n)
{
Loading<T>X;
X.w=w;
X.c=c;
X.n=n;
X.bestw=0;
X.cw=0;
X.r=0;//r的初始值为所有重量之和
for(int i=1;i<=n;i++)
X.r+=w[i];
X.maxLoading(1);
return X.bestw;
}
clavy 2001-07-11
  • 打赏
  • 举报
回复

这是个典型的NP问题,嘿嘿.
anjun 2001-07-11
  • 打赏
  • 举报
回复
操,你又问题啊
chinamengnan 2001-07-11
  • 打赏
  • 举报
回复
我认为这样是可以的
template<class T>class Loading
{
friend MaxLoading(T[],T,int);
private:
void maxLoading(int i);
int n;\\货箱数目
T *w,\\货箱重量数组
c,\\第一艘船的容量
cw,\\当前装载的重量
bestw;\\目前最优装载的重量
};

template<class T>void Loading<T>::maxLoading(int i)
{
if(i>n)
{
if(cw>bestw)
bestw=cw;
return;
}
if(cw+w[i]<=c)
{
cw+=w[i];
maxLoading(i+1);
cw-=w[i];
maxloading(i+1);
}
}

template<class T>T Maxloading(T w[],T c,int n)
{
Loading<T>X;
X.w=w;
X.c=c;
X.n=n;
X.bestw=0;
X.cw=0;
X.maxLoading(1);
return X.bestw;
}
你是试试吧!
别忘了给分!
chinamengnan 2001-07-11
  • 打赏
  • 举报
回复
大家快点好吗?
我很急的。

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧