#include<iostream>
using namespace std;
long long n,b;
long long a[20];
long long minn=1e18;
void dfs(int x,long long num){
if(num>=b){
minn=min(minn,num-b);
return ;
}
if(x==n+1){
return ;
}
dfs(x+1,num+a[x]);
dfs(x+1,num);
}
int main(){
cin>>n>>b;
for(int i=1;i<=n;i++) cin>>a[i];
dfs(1,0);
cout<<minn;
return 0;
}
1 个赞
恩?这个我好像在哪里回复过了?
1 个赞
老师sorry,是我回复次数达到上限,我让他“回”个帖
2 个赞
@王浚同1 A了吗?
2 个赞
没呢
1 个赞
有一个错误(勉强算):
if(num>=b){
minn=min(minn,num-b);
return ;
}
if(x==n+1){
return ;
}
改成:
if(x>n){
if(num>=b){
minn=min(minn,num-b);
}
return ;
}
试试
1 个赞
没用啊
1 个赞
再改一下:
void f(int x,int num){
if(x>n){
if(num>=b){
minn=min(minn,num);
}
return ;
}
for(int i=0;i<=1;i++){
f(x+1,num+a[x]*i);
}
}
把这个套进去
1 个赞
cout<<minn-b;
1 个赞
A了吗?
1 个赞
已回复了
1 个赞
#include<iostream>
using namespace std;
long long n,b;
long long a[20];
long long minn=1e18;
void f(int x,long long num){
if(x>n){
if(num>=b){
minn=min(minn,num);
}
return ;
}
for(int i=0;i<=1;i++){
f(x+1,num+a[x]*i);
}
}
int main(){
cin>>n>>b;
for(int i=1;i<=n;i++) cin>>a[i];
f(1,0);
cout<<minn-b;
return 0;
}
没用啊
1 个赞
我没辙了:
#include<bits/stdc++.h>
using namespace std;
int N,B,a[25],ans=0x3f3f3f3f;
void f(int step,int sum){
if(step>N){
if(sum>=B){
ans=min(ans,sum);
}
return ;
}
for(int i=0;i<=1;i++){
f(step+1,sum+a[step]*i);
}
}
int main(){
cin>>N>>B;
for(int i=1;i<=N;i++){
cin>>a[i];
}
f(1,0);
cout<<ans-B;
return 0;
}
1 个赞
老师,你的代码AC了
但哪儿有区别呀!
#include<bits/stdc++.h>
using namespace std;
long long n,b;
long long a[20];
long long minn=1e18;
void f(int x,long long num){
if(x>n){
if(num>=b){
minn=min(minn,num);
}
return ;
}
for(int i=0;i<=1;i++){
f(x+1,num+a[x]*i);
}
}
int main(){
cin>>n>>b;
for(int i=1;i<=n;i++) cin>>a[i];
f(1,0);
cout<<minn-b;
return 0;
}
1 个赞
他没定义long long
而且数组大小也不一样
1 个赞
你看看

必须得大于20的空间才行
1 个赞