01背包----动态规划,背包问题

简单背包问题
Time Limit:   1000MS       Memory Limit:   65535KB 
Submissions:   2217       Accepted:   408

 

Description 
设有一个背包可以放入的物品重量为S,现有n件物品,重量分别是w1,w2,w3,…wn。 
问能否从这n件物品中选择若干件放入背包中,使得放入的重量之和正好为S。 
如果有满足条件的选择,则此背包有解,否则此背包问题无解。
  
Input输入数据有多行,包括放入的物品重量为s,物品的件数n,以及每件物品的重量(输入数据均为正整数)
多组测试数据。 
Output对于每个测试实例,若满足条件则输出“YES”,若不满足则输出“NO“ 
Sample Input
20 5
1 3 5 7 9
Sample Output
YES

代码:

#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
int date[1005];
int f(int w,int s);
int main()
{
    int i,weight,n;
    while(scanf("%d %d",&weight,&n)!=EOF)
    {
        memset(date,0,sizeof(date));
        for(i=1;i<=n;i++)
        {
            scanf("%d",&date[i]);
        }
        if(f(weight,n))
            printf("Yes\n");
        else
            printf("No\n");


    }
    return 0;
}
int f(int w,int s)
{
    if(w==0)
        return 1;
    if(w<0||w>0&&s==0)
        return 0;
    if(f(w-date[s],s-1))
        return 1;
    return f(w,s-1);


}

你可能感兴趣的:(01背包----动态规划,背包问题)