裝箱問題改進

2022-02-21 05:27:20 字數 2618 閱讀 6618

/*

*   裝箱問題 

*   演算法:貪婪 

*   coder:瞿鵬志 

*   time:

2014-11-29*/

#include 

#include 

using namespace std;

#define max  20

/*第一步:建立物品字典 

*/ typedef struct gnode;

gnode *bh(int n); 

void pringnode(gnode *a,int n);

/*第二步:建立箱子 

*///1.箱子裡所裝的物品 

typedef struct gnodeggnode; 

//2.箱子

typedef struct boxbox; 

//開啟新箱子 

box *openbox(void);

//建立物品結點 

ggnode *greatlink(int gno);

/*第三步:裝箱  

貪心演算法 

*/ gnode *sortgno(gnode *a,int n);//排序 

ggnode *put(int gno);// 物品放入箱子 

box *packingbox(gnode *a,int n);//處理過程 

void prinboxg(box *p,gnode  *dic);//輸出箱子中物品的資訊 

void prinbox(box *a,gnode *dic);//輸出箱子資訊 

int main(void)

else

return 0;

}//建立物品字典 

gnode *bh(int n) 

/*end for*/

cout<<"物品資料庫建立成功!!!

"<

cout<

return a;

} //輸出物品字典 

void pringnode(gnode *a,int n)

/*end for*/

cout<

} //排序

gnode *sortgno(gnode *a,int n)

/*end for*/

for(int i=0;i

int max;

for(int j=max=i;j

if(b[j].ver>b[max].ver)/*end if*/

}/*end for2*/

t=b[i];

b[i]=b[max];

b[max]=t;

}/*end for1*/

return b;

} //開啟新箱子

box *openbox(void)

//放入物品

ggnode *put(int gno) /*

//裝箱 

box *packingbox(gnode *a,int n)

/*end if*/

/*   

qb=p;

//判斷已開箱子可否存入

while(p&&(a[i].ver > p->ver)) //while

//沒有已開箱子可以裝下物品

if(!p) /*end if*/

//裝箱   

//1.修改箱子容量 

/*  

p->ver-=a[i].ver;

//2.放入物品

for(qg=gp=p->gnext;gp;qg=gp,gp=gp->gnext);

if(!qg)

p->gnext=put(a[i].gno);

else

qg->gnext=put(a[i].gno);

}/*end for 遍歷物品

*//*

if(head->ver == max)

return head;//箱子頭結點位址

;}*/

ggnode *greatlink(int gno)

//裝箱 

box *packingbox(gnode *a,int n)

/*end if*/

//1.開新箱子

p=openbox();

if(!head)

else/*if(!p)*/

}//裝箱   

//1.修改箱子剩餘容量

p->ver-=a[i].ver;

//2.放入物品

newg=greatlink(a[i].gno);

for(qg=p->gnext;qg&&qg->gnext;qg=qg->gnext);

if(!qg)else

}/*end for 遍歷物品

*/return head;//箱子頭結點位址;}

//輸出箱子中物品的資訊 

void prinboxg(box *p,gnode  *dic)

/*end for in*/

}else 

} //輸出箱子資訊 

void prinbox(box *a,gnode *dic)

/*end for out*/

cout<<"共開啟

"《個箱子

"<

}

問題A 裝箱問題

思路 思路 根據演算法筆記上01揹包問題的一維形式改編,就僅僅是把每件物品的價值改為1,再未做其他修改,後來發現不行 const int maxn 1001 int dp maxn int w maxn int main for int i 0 i參照別人的答案,進行的思考 首先,狀態轉移方程 dp...

Codeup 問題 A 裝箱問題

問題描述 有乙個箱子的容量為v v為正整數,且滿足0 v 20000 同時有n件物品 0的體積值為正整數。要求從n件物品中,選取若干裝入箱內,使箱子的剩餘空間最小。輸入 1行整數,第1個數表示箱子的容量,第2個數表示有n件物品,後面n個數分別表示這n件 物品各自的體積。輸出 1個整數,表示箱子剩餘空...

練習 問題 A 裝箱問題

問題描述 有乙個箱子的容量為v v為正整數,且滿足0 v 20000 同時有n件物品 0的體積值為正整數。要求從n件物品中,選取若干裝入箱內,使箱子的剩餘空間最小。輸入 1行整數,第1個數表示箱子的容量,第2個數表示有n件物品,後面n個數分別表示這n件 物品各自的體積。輸出 1個整數,表示箱子剩餘空...