求背包问题的思路!
设有一个背包可以放入的物品重量为S,现有n件物品,重量分别是w1,w2,w3,…wn。 问能否从这n件物品中选择若干件放入背包中,使得放入的重量之和正好为S。
input
20 5
1 3 5 7 9
Sample Output
YES
程序代码:#include"iostream"
using namespace std;
int a[1000];
int f(int x,int y)
{
if(x==0)
return 1;
if(x<0||(x>0&&y<1))
return 0;
if(f(x-a[y],y-1))
return 1;
return f(x,y-1);
}
int main()
{
int i,s,n;
while(cin>>s>>n)
{
for(i=1;i<=n;i++)
{
cin>>a[i];
}
if(f(s,n))
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
return 0;
}首先我是想问大家思路的,我真的想不出来了,循环式没法了。但求到了段代码有 看不懂。所以大家要么讲下代码或给个思路。。!!!



