help!
查看原帖
help!
575246
ingx楼主2022/4/7 21:25

求助为什么第二份代码会t两个点(蒟蒻不是很会分析时间复杂度

ac code

#include <bits/stdc++.h>

using namespace std;

const int M = 110;
int n,cnt;
int ans = 0x7fffffff;
bool st[M];
pair<int,int>p[M];
void dfs(int u,int s,int k) {
	if(u == n + 1) {
		if(!cnt)
			return;
		ans = min(ans,abs(s - k));
		return ;
	}
		cnt ++;
		dfs(u + 1,s * p[u].first,k + p[u].second);
		cnt --;
		dfs(u + 1,s,k);
}
int main() {
	
	cin >> n;
	for(int i = 1;i <= n;i ++)
		cin >> p[i].first >> p[i].second;
	dfs(1,1,0);
	cout << ans;
	return 0;
} 

//wrong code

#include <bits/stdc++.h>

using namespace std;

const int M = 110;
 
int n,cnt;
int ans = 0x7fffffff;
bool st[M];
pair<int,int>p[M];
void dfs(int u,int s,int k) {
	if(u == n + 1) {
		if(!cnt)
			return;
		ans = min(ans,abs(s - k));
		//cout << ans << endl;
		return ;
	}
	for(int i = 1;i <= n;i ++) {
		if(!st[i]) {
			st[i] = true;
			cnt ++;
			dfs(u + 1,s * p[i].first,k + p[i].second);
			st[i] = false;
			cnt --;
		}
		dfs(u + 1,s,k);
	}
}
int main() {
	
	cin >> n;
	for(int i = 1;i <= n;i ++)
		cin >> p[i].first >> p[i].second;
	dfs(1,1,0);
	cout << ans;
	return 0;
} 
2022/4/7 21:25
加载中...