POJ 3628 Bookshelf 2(用DFS做01背包)

来源:互联网 发布:python 分布式计算 编辑:程序博客网 时间:2024/05/16 19:06

题目地址:点击打开链接

题意:小明买了一个书架,他想把东西放到书架上面,于是拿来了n个凳子,这些凳子的总高度大于等于书架的总高度,让你从n个凳子里取出一些使这些凳子的总高度大于书架的高度,并且超出书架的高度最低

思路:书架高度太高了,所以不能用动态规划,用搜索即可

AC代码:

#include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <queue>#include <stack>#include <map>#include <cstring>#include <climits>#include <cmath>#include <cctype>typedef long long ll;using namespace std;int a[25];int n,low,high;bool flag;void dfs(int t,int sum){    if(t == n)    {        if(sum >= high)        {            if(flag)            {                low = sum;                flag = false;            }            else if(sum < low)            {                low = sum;            }        }        return;    }    dfs(t+1,sum+a[t]);    dfs(t+1,sum);}int main(){    int i;    while(scanf("%d%d",&n,&high) != EOF)    {        for(i=0;i <n; i++)        {            scanf("%d",&a[i]);        }        low = 0;        flag = true;        dfs(0,0);        printf("%d\n",low-high);    }    return 0;}


0 0
原创粉丝点击