0
点赞
收藏
分享

微信扫一扫

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

前程有光 2022-08-03 阅读 54


题目地址:​​点击打开链接​​

题意:小明买了一个书架,他想把东西放到书架上面,于是拿来了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 条评论