60求助,#3#5RE,无法输出结果
查看原帖
60求助,#3#5RE,无法输出结果
495599
CSZD楼主2022/7/9 16:16
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
using namespace std;
int sum[50];//每个地窖的价值 
bool l[50][50];// 是否有通路 
long long j[50];//每个地窖可以有的最大价值 
long long p[50];//每个地窖的最佳通路 
int jl[50];//最后输出的最佳通路 
int main()
{
	int n;
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		cin>>sum[i];
		j[i]=sum[i];//每个地窖的初始最大价值就是他自己 
	}
	for(int i=1;i<=n;i++)
	{
		for(int j=i+1;j<=n;j++)
		{
			cin>>l[i][j];
		}
	}
	int max=j[1],z=0;//z是最佳终点 
	for(int i=2;i<=n;i++)
	{
		for(int k=1;k<=n;k++)
		{
			if(k==i)continue;
			if(l[i][k]==1||l[k][i]==1)
			{
				if(j[k]+sum[i]>j[i])
				{
					j[i]=sum[i]+j[k];
					p[i]=k;
				}
			}
		}
		if(j[i]>max)
		{
			max=j[i];
			z=i;
		}
	}
	int i;
	jl[0]=z;
	for(i=1;;i++)
	{
		jl[i]=p[jl[i-1]];
		if(jl[i]==0)break;
	}
	for(int j=i-1;j>=0;j--)
	{
		cout<<jl[j]<<" ";
		
	}
	cout<<endl;
	cout<<max<<endl;
	return 0;
}

加了注释 用dp做的

2022/7/9 16:16
加载中...