关于时间复杂度
查看原帖
关于时间复杂度
117756
liuziyan楼主2020/8/9 16:34

这道题我这个n^6不到一点的代码也能过,但其实如果出题人真要卡我们的话,30* 29* 28* 27* 26* 25=427,518,000,明显是TLE的

#include<bits/stdc++.h>
using namespace std;
map<string,int> s;
int a[40][40];
int w[40];
int main()
{
	int n,m;
	scanf("%d%d",&n,&m);
	string l;
	for (int i=1;i<=n;i++){
		cin>>l;
		scanf("%d",&w[i]);
		s[l]=i;
	}
	string r;
	int sa;
	for (int i=1;i<=m;i++){
		cin>>l>>r>>sa;
		a[s[l]][s[r]]+=sa;
		a[s[r]][s[l]]+=sa;
	}
	int ans=0,maxx=0;
	for (int i=1;i<=n;i++){
		for (int j=1;j<i;j++){
			for (int k=1;k<j;k++){
				for (int o=1;o<k;o++){
					for (int p=1;p<o;p++){
						for (int q=1;q<p;q++){
							ans+=w[i]+w[j]+w[k]+w[o]+w[p]+w[q];
							ans+=a[i][j]+a[i][k]+a[i][o]+a[i][p]+a[i][q];
							ans+=a[j][k]+a[j][o]+a[j][p]+a[j][q];
							ans+=a[k][o]+a[k][p]+a[k][q];
							ans+=a[o][p]+a[o][q];
							ans+=a[p][q];
							if (ans>maxx){
								maxx=ans;
							}
							ans=0;
						}	
					}
				}
			}
		}
	}
	cout<<maxx<<endl;
	return 0;
}
2020/8/9 16:34
加载中...