WA了最后一个点
查看原帖
WA了最后一个点
178128
杨凯楼主2020/10/4 20:03
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll b[50][50],dp[50][50],maxTable[50],enterTable[50],a[50];
int n,t,flag,maxx,p,ansv,ansi;
bool ifLast(int xx)
{
	for(int i=xx+1;i<n+1;i++)
	{
		if(b[xx][i])return false;
	}
	return true;
}
void printPath(int xx)
{
	if(xx==0)
	{
		return ;
	}
	printPath(enterTable[xx]);
	cout<<xx<<" ";
	return ;
}
int main()
{
  cin>>n;
  for(int i=1;i<n+1;i++)
  {
  	 cin>>a[i];
  }
  for(int i=1;i<n;i++)
  {
  	for(int j=1;j<n-i+1;j++)
  	{
  		cin>>t;
  		b[i][j+i]=t;
  		if(t)
  		{
  		   dp[j+i][i]=-1;	
		}
		else
		{
			dp[j][i]=0;
		}
	}
  }
//  for(int i=1;i<n+1;i++)
//  {
//  	for(int j=1;j<)
//  }
  for(int i=1;i<n+1;i++)
  {
  	 maxx=0;
  	 flag=0;
	 for(int j=1;j<i;j++)
  	 {
  	    if(dp[i][j]==-1)flag=1;	
	 }
	 if(!flag)
	 {
	 	for(int k=0;k<i;k++)
	 	{
	 	  	int temp;
	 	  	temp=dp[i][k]+a[i];
			if(temp>maxx)
			{
			  maxx=temp;
			  p=k;
		    }
		}
		maxTable[i]=maxx;
		enterTable[i]=p;
		for(int x=1;x<n+1;x++)
		{
			if(dp[x][i]==-1)dp[x][i]=maxx;
		}
	 }
  }
  for(int i=1;i<n+1;i++)
  {
  	if(ifLast(i))
  	{
  	   	if(maxTable[i]>ansv)
	    {
	    	ansv=maxTable[i];
	    	ansi=i;
		}
	}
  }
  printPath(ansi);
  cout<<endl;
  cout<<ansv;
//  cout<<endl;
//  for(int i=1;i<=n;i++)cout<<maxTable[i]<<" "; 
  return 0;	
} 
2020/10/4 20:03
加载中...