诶不是我没写return
```cpp
#include<bits/stdc++.h>
using namespace std;
int n,b;
int h[25];
int minn=100;
void dfs(int ans,int cnt,int tall)
{
if(ans==n)
{
if(tall>=b)
{
minn=min(minn,tall-b);
return;
}
}
for(int i=ans+1;i<=n;i++)
{
dfs(i,0,tall);
dfs(i,1,tall+h[i]);
}
}
int main()
{
cin>>n>>b;
for(int i=1;i<=n;i++)
{
cin>>h[i];
}
dfs(0,0,0);
cout<<minn;
return 0;
}
```
by shooting__star @ 2024-02-28 21:53:16
@[shooting__star](/user/955954) dp,你值得拥有
by taoyiwei17_cfynry @ 2024-02-28 21:55:13
@[shooting__star](/user/955954)
```cpp
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+5;
int n,b,w,h[N],sum,dp[N];
int main()
{
cin>>n>>b;
for(int i=1;i<=n;i++)
{
cin>>h[i];
sum+=h[i];
}
w=sum-b;
for(int i=1;i<=n;i++)
{
for(int j=w;j>=h[i];j--)
{
dp[j]=max(dp[j],dp[j-h[i]]+h[i]);
}
}
cout<<w-dp[w];
return 0;
}
by taoyiwei17_cfynry @ 2024-02-28 21:55:22
@[shooting__star](/user/955954) 不明白你 dfs 里的参数 cnt 是干嘛的
by ljlbj_fengyuwuzu @ 2024-02-28 21:57:35
@[shooting__star](/user/955954)
稍稍改动了一些地方,把 dfs 里面的 for 循环去掉了。为啥要写 for 啊。
```cpp
#include<bits/stdc++.h>
using namespace std;
int n,b;
int h[25];
int minn=100;
void dfs(int ans,int cnt,int tall)
{
if(ans==n)
{
if(tall>=b)
{
minn=min(minn,tall-b);
}
return;
}
dfs(ans + 1,0,tall);
dfs(ans + 1,1,tall+h[ans + 1]);
}
int main()
{
cin>>n>>b;
for(int i=1;i<=n;i++)
{
cin>>h[i];
}
dfs(0,0,0);
cout<<minn;
return 0;
}
```
by ljlbj_fengyuwuzu @ 2024-02-28 22:00:28
在 for 里考虑不选的情况会状态重复啊……
by MrPython @ 2024-02-28 22:04:06
```cpp
void dfs(int ans,int cnt,int tall)
{
if(ans==n)
{
if(tall>=b)
{
minn=min(minn,tall-b);
}
return;
}
dfs(ans+1,0,tall);
for(int i=ans+1;i<=n;i++)
{
dfs(i,1,tall+h[i]);
}
}
```
by MrPython @ 2024-02-28 22:09:47
@[shooting__star](/user/955954) 你的return也不应该在这里写
by MrPython @ 2024-02-28 22:10:07
AC。此帖结。
by shooting__star @ 2024-02-28 22:39:43