社区讨论

求助区间dp大佬

学术版参与者 5已保存回复 14

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
14 条
当前快照
1 份
快照标识符
@loc51nlv
此快照首次捕获于
2023/10/30 08:04
2 年前
此快照最后确认于
2023/11/04 14:14
2 年前
查看原帖

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

回头一看,样例43 54
我的代码输出63 54......

于是呢,在此

本蒟蒻,郑重——

求助各位大佬帮忙
附本人代码——
CPP
#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;  
}

回复

14 条回复,欢迎继续交流。

正在加载回复...