hdu 4283 You Are the One 区间dp

#include<bits/stdc++.h>
using namespace std;
const int inf=1<<24;

int main()
{
    int _,__,i,j,k,n,t,ans,a[100+5],sum[100+5],dp[100+5][100+5];
    scanf("%d",&_);
    for(__=1; __<=_; __++)
    {
        scanf("%d",&n);
        sum[0]=0;
        for(i=1; i<=n; i++)
        {
            scanf("%d",&a[i]);
            sum[i]=sum[i-1]+a[i];
        }
        memset(dp,0,sizeof(dp));
        for(i=1; i<=n; i++)
            for(j=i+1; j<=n; j++)
                dp[i][j]=inf;

        for(t=1; t<=n; t++)
        {
            for(i=1; i<=n-t+1; i++)
            {
                j=i+t-1;
                for(k=1; k<=t; k++)
                {
                    dp[i][j]=min(dp[i][j],dp[i+1][i+k-1]+dp[i+k][j]+a[i]*(k-1)+(sum[j]-sum[i+k-1])*k);
                }
            }
        }
        printf("Case #%d: %d\n",__,dp[1][n]);
    }
    return 0;
}

你可能感兴趣的:(hdu 4283 You Are the One 区间dp)