超级书架WA70分

#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 个赞

你看看
image
必须得大于20的空间才行

1 个赞