求助一下区间dp哪里挂了
查看原帖
求助一下区间dp哪里挂了
264548
Tangent233楼主2021/7/21 16:55
#include<bits/stdc++.h>
using namespace std;
const int maxn=50;
long long dp[maxn][maxn];
int rt[maxn][maxn];
void print(int l,int r)
{
    if(rt[l][r]==0) return;
    cout<<rt[l][r]<<' ';
    if(l==r) return;
    print(l,rt[l][r]-1);
    print(rt[l][r]+1,r);
}
int main()
{
    int n;cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>dp[i][i];
        rt[i][i]=i;
    }
    for(int len=2;len<=n;len++)
        for(int s=1;s+len-1<=n;s++)
        {
            int e=s+len-1;
            for(int i=s;i<=e;i++)
            {
                if(i==s)
                {
                    if(dp[i+1][e]+dp[i][i]>dp[s][e])
                    {
                        dp[s][e]=dp[i+1][e]+dp[i][i];
                        rt[s][e]=i;
                    }
            	}
				else 
					if(i==e)
                    	if(dp[s][i-1]+dp[i][i]>dp[s][e])
                    	{
                       		dp[s][e]=dp[s][i-1]+dp[i][i];
                        	rt[s][e]=i;
                    	}
                	else
                    	if(dp[s][i-1]*dp[i+1][e]+dp[i][i]>dp[s][e])
                    	{
                        	dp[s][e]=dp[s][i-1]*dp[i+1][e]+dp[i][i];
                        	rt[s][e]=i;
                    	}
            }
        }
    cout<<dp[1][n]<<endl;
    print(1,n);
    return 0;
}

感觉没写错但是就是挂了,呜呜

2021/7/21 16:55
加载中...