原创 解决论坛一个问题--最优装载问题

2009-10-23 10:28 2971 1 1 分类: 工程师职场

描述



有一批集装箱要装上一艘载重量为c的轮船。其中集装箱i的重量为Wi。最优装载问题要求确定在装载体积不受限制的情况下,将尽可能多的集装箱装上轮船。


编程任务: 对于给定的n个集装箱和轮船的载重量C,编程计算装入最多时的集装箱个数。


输入


输入由多组测试数据组成。每组测试数据输入的第1行中有2个正整数n和C。正整数n是集装箱个数;正整数C是轮船的载重量。接下来的一行中有n个整数,分别表示n个集装箱的重量,它们之间用空格分隔。


输出


对应每组输入,输出的每行是计算出的装入最多时的集装箱个数。


样例输入


4 5
3 5 2 1



样例输出


 2


 


原贴 http://topic.csdn.net/u/20091022/16/7d136bd2-cffe-478b-b802-b8bc1f395956.html?seed=124255976&r=60617528#r_60617528


本来还以为你这是对的,试了好几次才知道你在调用
selectMin(float *w,int i,int j) //寻找最小值的序号出错了,你是用逐个与后面的值比较,哪个最小就在t数组里排序,这样子后面的最小值就有好几次被排到了,正确的算法如下


#include <iostream>
using namespace std;
int selectMin(float *w,int i,int j);
void sort(float *w,int *t,int n);
void loading(int x[],float weight[],float cap,int n);
int main()
{
cout <<"输入货物总数:" <<endl;
int n;
cin>>n;
cout <<"输入船的载重量:" <<endl;
float shipW;
cin>>shipW;
cout <<"输入装载货物编号:" <<endl;
int *x=new int[n];
for(int i="1";i <=n;i++)
{
cin>>x;       
}
int *y=new int[n]; //货物的状态  1代表装,0代表不装 初始为全0
for(int i="1";i <=n;i++)
{
y=0;       
}
cout <<"输入各货物重量:(T)" <<endl;
float *w=new float[n];
for(int i="1";i <=n;i++)
{
cin>>w;       
}
cout <<"最优装载货物序列:" <<endl;
loading(y,w,shipW,n);
for(int i="1";i <=n;i++)
{
if(y==1)
cout <<x <<"  ";       
}
system("pause");
return 0;
}


 


 


void sort(float *w,int *t,int n)                    //按照weight的升序进行排序 t[]记录
{
for(int i="0";i <=n;i++)
{       float minweight="w"[0];//最小值
        for(int j="i";j <=n;j++)
        {
   int  temp="j";
   for(int k="i";k <=j;k++)
   {
    if(w[k] <w[temp])
   {
    minweight="w"[k];
             temp="k";
       }
  }
        t[j]=temp;                    //weight按照t升序排列
        }     
}   
}



void loading(int x[],float weight[],float cap,int n)    //装载函数
{
int *t=new int [n+1];
sort(weight,t,n);
for(int i="1";i <=n;i++)
{
x=0;
}
for(int i="1";i <=n&&weight[t] <=cap;i++) //贪心选择
{
        x[t]=1;
        cap="cap-weight"[t];
}
}

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
1
关闭 站长推荐上一条 /3 下一条