求助区间dp大佬
  • 板块学术版
  • 楼主liaoyichen
  • 当前回复14
  • 已保存回复14
  • 发布时间2021/7/18 22:06
  • 上次更新2023/11/4 14:14:37
查看原帖
求助区间dp大佬
486675
liaoyichen楼主2021/7/18 22:06

最近本蒟蒻刚学完区间dp,就自信地做了道黄题,结果——

惨不忍睹

回头一看,样例43 54

我的代码输出63 54......


于是呢,在此

本蒟蒻,郑重——

求助各位大佬帮忙

附本人代码——

#include<bits/stdc++.h>
#define ll long long
using namespace std;   
const ll N=201;
int main()  
{   ll dp1[N][N],dp2[N][N],a[N],s[N];
 	ll n,xiao,da;
	memset(dp1,0,sizeof(dp1));
	memset(dp2,0x3f,sizeof(dp2));
	cin>>n;
    for(ll i=1;i<=2*n;i++)
    {	if(i<=n)
		{	cin>>a[i];
		}
		a[i+n]=a[i];  
		s[i]=s[i-1]+a[i];  
    }
    xiao=0x3f;
    da=0;
    for(ll len=1;len<n;len++)  
    {  	for(ll i=1,j=i+len;j<2*n&&i<2*n;i++,j=i+len)  
        {	for(ll k=i;k<j;k++)  
            {	dp1[i][j]=max(dp1[i][j],dp1[i][k]+dp1[k+1][j]+s[j]-s[i-1]);   
            	dp2[i][j]=min(dp2[i][j],dp2[i][k]+dp2[k+1][j]+s[j]-s[i-1]);  
            }  
        }  
    }
    xiao=0x3f;
    for(ll i=1;i<=n;i++)  
    {	da=max(da,dp1[i][i+n-1]);
		xiao=min(xiao,dp2[i][i+n-1]);  
    }  
    cout<<xiao<<endl<<da;
	return 0;  
}
2021/7/18 22:06
加载中...