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 1631356
範例輸出
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;}