zoukankan      html  css  js  c++  java
  • LOJ P10147 石子合并 题解

    Analysis

    区间dp+前缀和

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #define maxn 210
    #define INF 2139062143
    using namespace std;
    int n,minn=INF,maxx;
    int a[2*maxn],dp_min[2*maxn][2*maxn],dp_max[2*maxn][2*maxn],sum[2*maxn];
    int main()
    {
        memset(dp_min,127,sizeof(dp_min));
        scanf("%d",&n);
        for(int i=1;i<=n;i++) 
        {
            scanf("%d",&a[i]);
            a[i+n]=a[i];
        }
        sum[1]=a[1];
        for(int i=2;i<=2*n;i++) sum[i]=sum[i-1]+a[i];
        for(int i=1;i<=2*n;i++)
        {
            dp_min[i][i]=0;
            dp_max[i][i]=0;
        } 
        for(int len=2;len<=n;len++)
        {
            for(int i=1;i<=2*n;i++)
            {
                int j=i+len-1;
                if(j>2*n) break;
                for(int k=i;k<j;k++)
                {
                    dp_min[i][j]=min(dp_min[i][j],dp_min[i][k]+dp_min[k+1][j]+sum[j]-sum[i-1]);
                    dp_max[i][j]=max(dp_max[i][j],dp_max[i][k]+dp_max[k+1][j]+sum[j]-sum[i-1]);
                    
                }
            }
        }
        for(int i=1;i<=n;i++)
        {
            minn=min(minn,dp_min[i][i+n-1]);
            maxx=max(maxx,dp_max[i][i+n-1]);
        }
        printf("%d
    %d",minn,maxx);
        return 0;
    } 
    /*
    4
    4 5 9 4
    */

    请各位大佬斧正(反正我不认识斧正是什么意思)

  • 相关阅读:
    SCP-S模拟56 C题
    NOIP模拟测试22
    NOIP模拟测试21
    NOIP模拟测试20
    NOIP模拟测试19
    网络流24题
    NOIP模拟测试18
    NOIP模拟测试16
    那些年我们颓过的游戏
    csp2019游记
  • 原文地址:https://www.cnblogs.com/handsome-zyc/p/11309196.html
Copyright © 2011-2022 走看看