求助,关于初始化
查看原帖
求助,关于初始化
508558
Cybrex楼主2024/10/16 09:38

以下是30分代码

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=22;
const int INF=1e18;
int dis[N][N];
int f[N][1<<N];
signed main(){
	int n,m;
	cin>>n>>m;
	for(int i=0;i<=n;i++){
		for(int j=0;j<(1<<(n+1));j++){
			f[i][j]=-INF;
		}
	}
	for(int i=0;i<=n;i++){
		for(int j=0;j<=n;j++){
			dis[i][j]=-INF;
		}
	}
	for(int i=1;i<=m;i++){
		int u,v,w;
		cin>>u>>v>>w;
		dis[u][v]=max(w,dis[u][v]);
	}
	f[0][1]=0;
	for(int i=1;i<n;i++){
		f[i][(1<<i)]=dis[0][i];
	}
	for(int k=1;k<(1<<n);k++){
		for(int i=0;i<n;i++){
			if(!((k>>i)&1)){
				continue;
			}
			for(int j=0;j<n;j++){
				if(i==j){
					continue;
				}
				if(!((k>>j)&1)){
					continue;
				}
				f[i][k]=max(f[i][k],f[j][k^(1<<i)]+dis[j][i]);
			}
		}
	}
	int ans=-INF;
	for(int k=1;k<(1<<n);k++){
		ans=max(ans,f[n-1][k]);
	}
	cout<<ans;
	return 0;
}

为什么把其中的初始化代码删除就能ac (初始化代码)

	for(int i=1;i<n;i++){
		f[i][(1<<i)]=dis[0][i];
	}
2024/10/16 09:38
加载中...