資源簡介
描述:
有兩艘船,載重量分別是c1、 c2,n個集裝箱,重量是wi (i=1…n),且所有集裝箱的總重量不超過c1+c2。確定是否有可能將所有集裝箱全部裝入兩艘船。
輸入:
多個測例,每個測例的輸入占兩行。第一行一次是c1、c2和n(n<=10);第二行n個整數(shù)表示wi (i=1…n)。n等于0標(biāo)志輸入結(jié)束。
輸出:
對于每個測例在單獨的一行內(nèi)輸出Yes或No。
輸入樣例:
7 8 2
8 7
7 9 2
8 8
0 0 0
輸出樣例:
Yes
No
提示:
求出不超過c1的最大值max,若總重量-max < c2則能裝入到兩艘船。
代碼片段和文件信息
//用回溯法,不帶剪枝、限界函數(shù)
#include
#include
#define?NUM 8
void?maxloading(int?const?*wint?constint);
int?n; //記錄集裝箱的數(shù)量
int?cw=0; //當(dāng)前載重量
int?bestc=0; //記錄集裝箱1的最大裝載量
void?main()
{
int?c1c2; //記錄兩只船的載重量
int?i;
int?sum=0; //存儲每組數(shù)據(jù)的集裝箱的總重量
int?counter=0; //記錄一組數(shù)據(jù)處理后的結(jié)果的下標(biāo)
bool?tag[NUM]; //記錄各組數(shù)據(jù)處理后的結(jié)果
// printf(“Input?c1?c2?and?n:\n“);
scanf(“%d?%d?%d“&c1&c2&n);
int?*w=(int?*)malloc(sizeof(int)*n); //記錄每個集裝箱的重量
for(i=0;i tag[i]=false;
while(n)
{
//printf(“Input?weight?of?boxs:\n“);
for(i=0;i {
scanf(“%d“&w[i]);
sum=sum+w[i];
}
maxloading(wc10);
if((sum-bestc)<=c2)
tag[counter++]=true;
評論
共有 條評論