zoukankan      html  css  js  c++  java
  • BZOJ 1084 最大子矩阵

    奇怪的dp。。。。

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #define inf 2000000000
    using namespace std;
    int n,m,p,map[105][3],f[105][15],sum[105][3],dp[105][105][15],ans=-inf;
    void work1()
    {
        for (int i=1;i<=n;i++) scanf("%d",&map[i][1]);
        for (int i=1;i<=n;i++)
            for (int j=1;j<=p;j++)
                f[i][j]=-inf;
        f[1][1]=map[1][1];
        for (int i=2;i<=n;i++)
        {
            for (int j=1;j<=p;j++)
            {
                for (int k=1;k<=i-2;k++)
                    f[i][j]=max(f[i][j],f[k][j-1]);
                f[i][j]=max(f[i][j],f[i-1][j]);f[i][j]+=map[i][1];
            }
            ans=max(ans,f[i][p]);
        }
        printf("%d
    ",ans);
    }
    void work2()
    {
        for (int i=1;i<=n;i++)
            for (int j=1;j<=m;j++)
                scanf("%d",&map[i][j]);
        for (int i=1;i<=n;i++)
        {
            sum[i][1]=sum[i-1][1]+map[i][1];
            sum[i][2]=sum[i-1][2]+map[i][2];
        }
        for (int i=0;i<=n;i++)
            for (int j=0;j<=n;j++)
                for (int k=1;k<=p;k++)
                    dp[i][j][k]=-inf;
        for (int i=1;i<=n;i++)
            for (int j=1;j<=n;j++)
                for (int k=1;k<=p;k++)
                {
                    dp[i][j][k]=max(dp[i-1][j][k],dp[i][j-1][k]);
                    for (int l=0;l<=i-1;l++) dp[i][j][k]=max(dp[i][j][k],dp[l][j][k-1]+sum[i][1]-sum[l][1]);
                    for (int l=0;l<=j-1;l++) dp[i][j][k]=max(dp[i][j][k],dp[i][l][k-1]+sum[j][2]-sum[l][2]);
                    if (i==j)
                    {
                        for (int l=0;l<=i-1;l++)
                            dp[i][j][k]=max(dp[i][j][k],dp[l][l][k-1]+sum[i][1]+sum[i][2]-sum[l][1]-sum[l][2]);
                    }
                }
        printf("%d
    ",dp[n][n][p]);
    }
    int main()
    {
        scanf("%d%d%d",&n,&m,&p);
        if (m==1) work1();
        else work2();
        return 0;
    }
  • 相关阅读:
    洛谷 1341 无序字母对
    POJ 2774 后缀数组 || 二分+哈希
    HDU 1251 统计难题
    【解题报告】AtCoder ABC115 (附英文题目)
    【模板】后缀数组
    洛谷 3567/BZOJ 3524 Couriers
    Beta 冲刺 (1/7)
    团队项目评测
    beta冲刺前准备
    Alpha冲刺——事后诸葛亮
  • 原文地址:https://www.cnblogs.com/ziliuziliu/p/6020843.html
Copyright © 2011-2022 走看看