149. [USACO Dec07] 书架2
★ 输入文件:shelf2.in
输出文件:
shelf2.out
简单对比
时间限制:1 s 内存限制:128 MB
- 第 1 行: 两个整数: N , B
- 第 2..N+1 行: 第 i+1 行包含一个整数 Hi
- 第 1 行: 一个非负整数,奶牛总高度超出书架高度的最小高度。
译 by CmYkRgB123
Farmer John最近为奶牛图书馆购买了一个书架,书架的下层很快装满了书,现在只剩下了顶层书架有空间。
在 N (1 ≤ N ≤ 20)头牛中,第i头牛的身高为 Hi (1 ≤ Hi ≤ 1,000,000)。书架的高度为 B (1 ≤ B ≤ 2,000,000,007),且 B 小于所有奶牛的身高之和。
书架的顶层高于最高的牛的身高,但是若干个奶牛可以站成一摞,这样总高度就是它们的身高之和。总高度应大于等于书架的高度,奶牛才能取到书。
但是越多的奶牛站成一摞,它们就越危险。你的工作就是找到奶牛总高度超出书架高度的最小高度。
输入
输出
样例输入
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; }