[USACO Dec07] 书架2

149. [USACO Dec07] 书架2

★   输入文件: shelf2.in   输出文件: shelf2.out    简单对比
时间限制:1 s   内存限制:128 MB

译 by CmYkRgB123

Farmer John最近为奶牛图书馆购买了一个书架,书架的下层很快装满了书,现在只剩下了顶层书架有空间。

在 N (1 ≤ N ≤ 20)头牛中,第i头牛的身高为 Hi (1 ≤ Hi ≤ 1,000,000)。书架的高度为 B (1 ≤ B ≤ 2,000,000,007),且 B 小于所有奶牛的身高之和。

书架的顶层高于最高的牛的身高,但是若干个奶牛可以站成一摞,这样总高度就是它们的身高之和。总高度应大于等于书架的高度,奶牛才能取到书。

但是越多的奶牛站成一摞,它们就越危险。你的工作就是找到奶牛总高度超出书架高度的最小高度。

输入

  • 第 1 行: 两个整数: N , B
  • 第 2..N+1 行: 第 i+1 行包含一个整数 Hi

输出

  • 第 1 行: 一个非负整数,奶牛总高度超出书架高度的最小高度。

样例输入

5 16
3
1
3
5
6

样例输出

1
 
 
简单搜索
#include<cstdio>
using namespace std;
int a[22];
int ans,n,b;
void dfs(int cur,int num){
    if(num>=b&&num-b>ans) return ;
    if(cur==n+1){
        if(num>=b&&num-b<ans)  ans=num-b;
        return ;
    }
    dfs(cur+1,num+a[cur]);
    dfs(cur+1,num);
}
int main(){
    freopen("shelf2.in","r",stdin);
    freopen("shelf2.out","w",stdout);
    scanf("%d%d",&n,&b);
    for(int i=1;i<=n;i++) scanf("%d",&a[i]);
    ans=2000000007;
    dfs(1,0);
    printf("%d\n",ans);
    return 0;

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值