簡單揹包問題

設有一個揹包能夠放入的物品重量爲S,現有n件物品,重量分別是w1,w2,w3,…wn。 測試

問可否從這n件物品中選擇若干件放入揹包中,使得放入的重量之和正好爲S。 spa

若是有知足條件的選擇,則此揹包有解,不然此揹包問題無解。code

 

輸入

輸入數據有多行,包括放入的物品重量爲s,物品的件數n,以及每件物品的重量(輸入數據均爲正整數)component

多組測試數據。blog

輸出

對於每一個測試實例,若知足條件則輸出「YES」,若不知足則輸出「NO「ip

樣例輸入

20 5
1 3 5 7 9

樣例輸出

YES
#include <stdio.h>

int g_value[1000];

int packet(int weight, int mount)
{
if (weight == 0)  //揹包問題有解
{
return 1;  
}
if (weight < 0 || (weight > 0 && mount < 1))  //此揹包集合不符合條件
{
return 0;
}
if (packet(weight - g_value[mount - 1], mount - 1))  //判斷是否 weight[mount - 1]是否包含在最後的揹包集合中
{
return 1;    //
}
else
{
return packet(weight, mount - 1);  //不在
}
}
int main()
{
int weight, mount, i;
while(EOF != scanf("%d%d", &weight, &mount))
{
for (i = 0; i < mount; i++)
{
scanf("%d", &g_value[i]);
}
if (packet(weight, mount))
{
printf("YES\n");
}
else
{
printf("NO\n");
}
}
return 0;
}
相關文章
相關標籤/搜索