zoukankan      html  css  js  c++  java
  • POJ1179 Polygon

    POJ1179 Polygon

    题意:给出一个多边形,切断一条边,合并剩下的点(合并两个点之后将两个点上的数值按照边上的运算符(‘+’或‘*’)计算即为新的点的权值),求最后的点上得权值最大为多少

    • 由于两个负数相乘可能得出很大的正数,所以只记录最大值是不够的,还应记录最小值
    • 对于第一步删边的操作,我们可以这样枚举:最初选择任意一条边删除,然后把剩下的链复制一倍接在末尾,在这个长度为n的链,f[i,i+n-1]对应将区间[i,i+n-1]合并成一个顶点,然后把剩余部分合并成一个顶点。
    • 这种“任意选择一个位置断开,复制成2倍长度的链”的方法是解决DP中环形问题的常用手段之一

    代码:

    #include<cstdio>
    #include<iostream>
    #include<cstring>
    using namespace std;
    
    const int N=60*2;
    int n,a[N],f[N][N],g[N][N];
    char b[N];
    
    int main()
    {
        memset(f,-0x3f,sizeof(f));
        memset(g,0x3f,sizeof(g));
        scanf("%d",&n);
        for(int i=1 ; i<=n ; i++)
            cin>>b[i]>>a[i],a[i+n]=a[i],b[i+n]=b[i];
        
        for(int i=1 ; i<=2*n ; i++)
            f[i][i]=g[i][i]=a[i];
        
        for(int len=2 ; len<=n ; len++)
        {
            for(int i=1,j=i+len-1; j<=2*n ; i++,j++)
            {
                for(int k=i ; k<j ; k++)
                {
                    if(b[k+1]=='t')//plus
                    {
                        f[i][j]=max(f[i][j],f[i][k]+f[k+1][j]);
                        g[i][j]=min(g[i][j],g[i][k]+g[k+1][j]);                    
                    }
                    else if(b[k+1]=='x')//multiply
                    {
                        f[i][j]=max(f[i][j],f[i][k]*f[k+1][j]);
                        f[i][j]=max(f[i][j],g[i][k]*g[k+1][j]);
                        g[i][j]=min(g[i][j],g[i][k]*g[k+1][j]);
                        g[i][j]=min(g[i][j],f[i][k]*f[k+1][j]);
                        g[i][j]=min(g[i][j],f[i][k]*g[k+1][j]);
                        g[i][j]=min(g[i][j],g[i][k]*f[k+1][j]);
                    }
                }
            }    
        }
        int ans=-1e10;
        for(int i=1 ; i<=n ; i++)    ans=max(ans,f[i][i+n-1]);
        printf("%d
    ",ans);
        for(int i=1 ; i<=n ; i++) 
            if(f[i][i+n-1]==ans)
                printf("%d ",i);
        
        return 0;
    }
    View Code
  • 相关阅读:
    Composite in Javascript
    Model Validation in Asp.net MVC
    HttpRuntime.Cache vs. HttpContext.Current.Cache
    Controller Extensibility in ASP.NET MVC
    The Decorator Pattern in Javascript
    The Flyweight Pattern in Javascript
    Model Binding in ASP.NET MVC
    Asp.net MVC
    jQuery Ajax 实例 全解析
    ASP.NET AJAX入门系列
  • 原文地址:https://www.cnblogs.com/wmq12138/p/10367929.html
Copyright © 2011-2022 走看看