/*
* 裝箱問題
* 演算法:貪婪
* 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個整數,表示箱子剩餘空...