zoukankan      html  css  js  c++  java
  • 洛谷 P1180 石子合并

    洛谷 P1180 石子合并

    题目传送门

    区间DP模板题,枚举起点终点、中间点再进行转移即可。

    方程为

     

    这里我们可以使用前缀和来维护区间查和

    值得注意的是,这里的石子围成一圈,我们可以把一个圈拆成两条链处理。

    最后只需遍历dp(i,i+n-1)即可

    #include<cstdio>
    #define maxn 210
    #include<algorithm>
    #include<cstring>
    using namespace std;
    int num[maxn];
    int sum[maxn];
    int mx[maxn][maxn];
    int mn[maxn][maxn];
    int main()
    {
       int n;
       memset(mn,0x3f,sizeof(mn));
       scanf("%d",&n);
       for(int i=1;i<=n;i++)
      {
           scanf("%d",&num[i]);  
           mn[i][i] = mn[i+n][i+n] = 0;
           num[i+n]=num[i];
      }
       for(int i=1;i<=2*n;i++)
      {
           sum[i] = sum[i-1] + num[i];
      }
       int mm=1000000,xx=0;
       for(int p=1;p<n;p++)
      {
           for(int i=1,j=i+p;(i<2*n)&&(j<2*n);i++,j=i+p)
          {
               for(int k=i;k<j;k++)
              {
                   mx[i][j] = max(mx[i][j],mx[i][k]+mx[k+1][j]+sum[j]-sum[i-1]);
                   mn[i][j] = min(mn[i][j],mn[i][k]+mn[k+1][j]+sum[j]-sum[i-1]);
              }
          }
      }
       for(int i=1;i<=n;i++)
      {
           xx=max(xx,mx[i][i+n-1]);
           mm=min(mm,mn[i][i+n-1]);

      }
       printf("%d %d",mm,xx);
    }
  • 相关阅读:
    MapReduce in MongoDB
    MongoDB的一些基本操作
    谈谈NOSQL
    Java中的反射(1)
    Mybatisの常见面试题
    关于Lombok和自动生成get set方法
    订Pizza(Java)
    美化Div的边框
    爱,死亡和机器人(Love,Death&Robots)
    session与cookie的介绍和两者的区别之其相互的关系
  • 原文地址:https://www.cnblogs.com/Marcelo/p/13809468.html
Copyright © 2011-2022 走看看