70分求助
查看原帖
70分求助
516468
_Give_up_楼主2022/10/2 12:58

P1880过了,这个没过?

#include<bits/stdc++.h>
#define N 610

using namespace std;

int a[N],sum[N],dp[N][N];

int main()
{
	int n;
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&a[i]);
        a[i+n]=a[i];
    }
    for(int i=1;i<=n<<1;i++)
    {
        dp[i][i] = 0;
        sum[i] = sum[i-1]+a[i];
    }
    for(int l=2;l<=n;l++)
    {
        for(int i=1,j=l;i+l-1<=n<<1;i++,j=i+l-1)
        {
            dp[i][j] = INT_MAX;
            for(int k=i;k<j;k++)
                dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j]+sum[j]-sum[i-1]);
        }
    }
    int ans=INT_MAX;
    for(int i=1;i<=n;i++)
        ans = min(ans,dp[i][i+n-1]);
    printf("%d\n",ans);
    return 0;
}
2022/10/2 12:58
加载中...