45分求调
查看原帖
45分求调
1094030
yr409892525楼主2024/12/2 17:05
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e3+5,M=1e6+5,inf=1e18;
int n,s;
int a[N][N]; 
struct code{
	int u,x;
};
vector<code> op[M];
int dis[M];
bool vis[M];
int point(int x,int y){
	return x*(x-1)/2+y;
}
void Spfa(){
	for(int i=1;i<M;i++){
		vis[i]=0;
		dis[i]=0;
	}
	queue<int> q;
	q.push(s);
	vis[s]=1;
	dis[s]=0;
	while(!q.empty()){
		int u=q.front();
		q.pop();
		vis[u]=0;
		for(int i=0;i<op[u].size();i++){
			code v=op[u][i];
			if(dis[v.u]<dis[u]+v.x){
				dis[v.u]=dis[u]+v.x;
				if(vis[v.u]==0){
					vis[v.u]=1;
					q.push(v.u);
				}
			}
		}
	}
	return ;
}
signed main(){
	ios::sync_with_stdio(false);
	cin.tie(0),cout.tie(0);
	cin>>n;
	s=1;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=i;j++){
			cin>>a[i][j];
		}
	}
	for(int i=1;i<n;i++){
		for(int j=1;j<=i;j++){
			int x=point(i,j);
			op[x].push_back({point(i+1,j),a[i+1][j]});
			if(j<i){
				op[x].push_back({point(i+1,j+1),a[i+1][j+1]});
			}
		}
	}
	Spfa();
	int ans=0;
	for(int i=1;i<=n;i++){
		ans=max(ans,dis[point(n,i)]);
	}
	cout<<ans+a[1][1];
	return 0;
}
2024/12/2 17:05
加载中...