求助!字典序最小的前序数列怎么改?
查看原帖
求助!字典序最小的前序数列怎么改?
265037
UntilR楼主2020/6/16 16:44

rt

#include <bits/stdc++.h>
using namespace std;
unsigned long long f[31][31];
int n,t[31][31];
void coutq(int x,int y)
{
	cout<<t[x][y]<<" ";
	if(t[x][y]-1>=x)
		coutq(x,t[x][y]-1);
	if(t[x][y]+1<=y)
		coutq(t[x][y]+1,y);
	return;
}
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
			f[i][j]=1;
	for(int i=1;i<=n;i++)
		t[i][i]=i;
	for(int i=1;i<=n;i++)
		cin>>f[i][i];
	for(int l=2;l<=n;l++)
		for(int i=1;i+l-1<=n;i++)
			for(int j=i;j<=i+l-1;j++)
				if(f[i][i+l-1]<=f[i][j-1]*f[j+1][i+l-1]+f[j][j])
				{
					//cout<<f[i][i+l-1]<<endl;
					f[i][i+l-1]=f[i][j-1]*f[j+1][i+l-1]+f[j][j];
					t[i][i+l-1]=j;
				}
	/*for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
			cout<<f[i][j]<<" ";
		cout<<endl;
	}*/
	cout<<f[1][n]<<endl;
	coutq(1,n);
	return 0;
}
2020/6/16 16:44
加载中...