https://www.luogu.org/recordnew/show/20310024
by Donaghy @ 2019-07-05 09:29:33
你要把每一个可能的结果算出来
```cpp
for(int i=1;i<=n;i++){
if(book[i]==0){
book[i]=1;
dfs(i,h+nainiu[i]);
book[i]=0;
}
}
```
不能只判断x+1,x+2
by Ew_Cors @ 2019-07-05 10:15:31
完整代码
```cpp
#include<iostream>
using namespace std;
long long minn=100000,nainiu[25];
int n,b;
bool book[25];
void dfs(int nnbh,long long h){
if(h>=b){
if(h-b<minn){
minn=h-b;
}
return;
}
book[nnbh]=1;
for(int i=1;i<=n;i++){
if(book[i]==0){
book[i]=1;
dfs(i,h+nainiu[i]);
book[i]=0;
}
}
book[nnbh]=0;
return;
}
int main(){
cin>>n>>b;
for(int i=1;i<=n;i++){
cin>>nainiu[i];
}
for(int i=1;i<=n;i++){
dfs(i,nainiu[i]);
}
cout<<minn;
return 0;
}
```
by Ew_Cors @ 2019-07-05 10:18:03
@[鬼畜UKE自动机](/space/show?uid=180103) 谢谢dalao
by Donaghy @ 2019-07-05 10:31:48
你可以这样,那样,最后在那样就做出来了@[Donaghy](/space/show?uid=203762)
by ruoran @ 2019-07-05 10:32:13
我不是大佬qwq
by Ew_Cors @ 2019-07-05 20:37:02
建议你这样做比较清楚一点:
```cpp
void dfs(int start,int cnt){
if(cnt == 0){
if(sum >= m) minn = min(minn,sum - m);
return;
}
for(int i = start;i <= n - cnt + 1;i++){
sum += a[i];
dfs(i + 1,cnt - 1);
sum -= a[i];
}
}
for(int i = 1;i <= n;i++){
int j = i;
dfs(1,j);
}
by LYM20114 @ 2021-10-15 17:05:32
@[Donaghy](/user/203762) cout << 0 << endl也有84.。。。就很离谱
by sunfather @ 2022-01-29 21:19:04