请问本蒟蒻的代码有什么改进空间吗?
查看原帖
请问本蒟蒻的代码有什么改进空间吗?
754444
tamamocross楼主2023/4/14 12:13

rt,本题我是用meet in the middle做的,代码如下

#include<iostream> 
#include<map> 
using namespace std;
int x,y;
int len1;
int ans;
int k[7],p[7];
map<long long,int> mp;
long long quick_pow(int base,int n){
	long long sum=1;
	int b=base;
	while(n){
		if(n&1){
			n--;
			sum*=b;
		}
		n>>=1;
		b=b*b;
	}
	return sum;
}
void dfs1(int f,int sum){
	if(f<=len1){
		for(int i=1;i<=y;i++){
			dfs1(f+1,sum+k[f]*quick_pow(i,p[f]));
		}
		return;
	}
	mp[sum]++;

}
void dfs2(int f,int sum){
	if(f>len1){
		for(int i=1;i<=y;i++){
			dfs2(f-1,sum+k[f]*quick_pow(i,p[f]));
		}
		return;
	}
	ans+=mp[-sum];
}
int main(){
	cin>>x>>y;
	for(int i=1;i<=x;i++){
		cin>>k[i]>>p[i];
	}
	len1=x/2;
	dfs1(1,0);
	dfs2(x,0);
	cout<<ans;
}

我确实过了,但我看测试数据中时间最长的跑了4s(如果本题的时间限制是1s就过不了了),所以我想请问下有没有办法能改进时间复杂度,谢谢!

2023/4/14 12:13
加载中...