听灌多
  • 板块灌水区
  • 楼主Lionel_Messi_10
  • 当前回复3
  • 已保存回复4
  • 发布时间2024/8/17 21:40
  • 上次更新2024/8/18 09:12:14
查看原帖
听灌多
1376362
Lionel_Messi_10楼主2024/8/17 21:40

求各位dalao帮估一下下面代码的时间复杂度(玄关)

#include <bits/stdc++.h>
using namespace std;
int n,k,a[10],ans[105]={0};
bool vis[105];
set<vector<int> > s;
void dfs(int step){
	if(step==n+1){
		for(int i=1;i<=n;i++){
			if(ans[i]>a[i]) return ;
		}
		int sum=0;
		for(int i=1;i<=n;i++) sum+=ans[i];
		if(sum%k==0){
			vector<int> v(ans+1,ans+n+1);
			s.insert(v);
		}
		return ;
	}
	for(int i=1;i<=n;i++){
		if(!vis[i]){
			for(int j=1;j<=a[i];j++){
				ans[step]=j;
				vis[j]=1;
				dfs(step+1);
				vis[j]=0;
			}
		}
	}
}
int main(){
	cin>>n>>k;
	for(int i=1;i<=n;i++) cin>>a[i];
	dfs(1);
	for(auto i:s){
		for(auto j:i) cout<<j<<' ';
		puts("");
	}
}
2024/8/17 21:40
加载中...