60分 WA求助
查看原帖
60分 WA求助
308854
tzl_Dedicatus545楼主2020/7/15 16:08

RT,DP做的

//By: Luogu@wangdemao(308854)
#include <iostream>
#include <cstring>

using std::cin;
using std::cout;
using std::cerr;
using std::min;
using std::max;

int g[1000][1000],f[298222],geshu[321098],c[19041];

int main()
{
	int n;

	cin>>n;

	for(int i=1;i<=n;i++)
		cin>>geshu[i];


	for(int i=1;i<=n;i++)
	{
		for(int j=i+1;j<=n;j++)
		{
			cin>>g[i][j];
			g[j][i]=g[i][j];
		}
	}

	f[n]=geshu[n];

	//memset(f,-1,sizeof(f));

	for(int i=n-1;i>=1;i--)
	{
		for(int j=i-1;j<=n;j++)
		{
			if(g[i][j])
				if(f[i]<f[j]+geshu[i])
		 			f[i]=f[j]+geshu[i],c[i]=j;
		}
	}

	int qidian=1,i;

	for(int i=1;i<=n;i++)
	{
		if(f[i]>f[qidian])
			qidian=i;
	}

	//cout<<qidian;
	/*
	3
10 20 5
0 1
0

	*/

	i=qidian;

	while(i!=0)
	{
		cout<<i<<" ";
		i=c[i];
	}

	cout<<std::endl;

	cout<<f[qidian]<<std::endl;

	return 0;
}

2020/7/15 16:08
加载中...