简单的背包问题。
设有一个背包,可以放入的重量为s。现有n件物品,重量分别为w1,w2…,wn,(1≤i≤n)均为正整数,从n件物品中挑选若干件,使得放入背包的重量之和正好为s。
输入格式
第一行两个整数包括放入的物品重量为s(s<=32767)和物品的件数n(n<=50);
第二行n个整数,表示每件物品的重量(输入数据均为正整数)
输出格式
若满足条件则输出"YES",若不满足则输出"NO"。
样例
20 5
1 3 5 7 9
YES
#include<stdio.h>
int weight[50];
int packet(int s,int n)
{
if(s==0) return 1;
if(s<0||n<1) return 0;
if(packet(s-weight[n-1],n-1)){
return 1;
}
else return packet(s,n-1);
}
int main()
{
int i,s,n;
scanf("%d %d",&s,&n);
for(i=0;i<n;i++){
scanf("%d",&weight[i]);
}
if(packet(s,n))
printf("YES");
else printf("NO");
return 0;
}