代码求调
查看原帖
代码求调
754444
tamamocross楼主2023/4/30 11:20
#include<iostream> 
#include<map>
using namespace std;
int N,sum;
int ans=0x7fffffff;
struct ele{
	int n;
	ele(int n_=-1){
		n=n_;
	}
	friend bool operator <(ele a,ele b){
		return a.n>b.n;
	}
};
map <long long,ele> mp;
int melon[31];
void search_l(int start,int end,long long n,int f){
	//cout<<start<<" "<<melon[start]<<" "<<n<<" "<<f<<endl;
	if(n>sum){
		return;
	}
	if(start!=end+1){
		search_l(start+1,end,n,f);
		search_l(start+1,end,n+melon[start],f+1);
		search_l(start+1,end,n+2*melon[start],f);
	}else{
		ele tmp(f);
		mp[n]=tmp;
		return;
	}
}
void search_r(long long start,int end,long long n,int f){
	if(n>sum){
		return;
	}
	if(start!=end){
		search_r(start-1,end,n,f);
		search_r(start-1,end,n+melon[start],f+1);
		search_r(start-1,end,n+2*melon[start],f);
	}else{
		if(mp[sum-n].n!=-1){
			ans=min(mp[sum-n].n+f,ans);
		}
	}
	return;
}


int main(){
	cin>>N>>sum;
	for(int i=1;i<=N;i++){
		cin>>melon[i];
	}
	int mid=(N+1)/2;
	sum*=2;
	search_l(1,mid,0,0);
	search_r(N,mid,0,0);
	if(ans!=0x7fffffff){
		cout<<ans;
	}else{
		cout<<-1;
	}
}

只有56分,有一堆MLE和TLE

2023/4/30 11:20
加载中...