题目地址:点击打开链接
题意:小明买了一个书架,他想把东西放到书架上面,于是拿来了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;
}