• 洛谷 P1174 打砖块


    ->题目链接

    题解:

    一道dp好题。

    #include<cstdio>
    #include<iostream>
    using namespace std;
    int a[210][210],s1[210][210],s2[210][210],dp1[210][210],dp2[210][210],n,m,k;
    bool vis[210][210];
    int main(){
        scanf("%d%d%d",&n,&m,&k);
        for(int i=1;i<=n;i++)
            for(int j=1;j<=m;j++){
                char ch[11];
                scanf("%d%s",&a[i][j],ch);
                if(ch[0]=='Y') vis[i][j]=true;
        }
        for(int i=1;i<=m;i++){
            int cnt=0;
            for(int j=n;j>=1;j--)
                if(vis[j][i]) s1[i][cnt]+=a[j][i];
                else s1[i][++cnt]=s2[i][cnt]=s1[i][cnt-1]+a[j][i];
        }
        for(int i=1;i<=m;i++)
            for(int j=0;j<=k;j++)
                for(int g=0;g<=n&&g<=j;g++){
                    dp1[i][j]=max(dp1[i][j],dp1[i-1][j-g]+s1[i][g]);
                    if(g>0) dp2[i][j]=max(dp2[i][j],dp1[i-1][j-g]+s2[i][g]);
                    if(j-g>0) dp2[i][j]=max(dp2[i][j],dp2[i-1][j-g]+s1[i][g]);
                }
        printf("%d
    ",dp2[m][k]);
        return 0;
    }
    AC

    于2018.10.20:

    莫名其妙,不知道为什么,原本AC的题目重新交上居然全WA了。

    两个月前:

    现在:

    然后AC

    #include<cstdio>
    #include<iostream>
    using namespace std;
    int a[210][210],s1[210][210],s2[210][210],dp1[210][210],dp2[210][210],n,m,k;
    bool vis[210][210];
    int main(){
        scanf("%d%d%d",&n,&m,&k);
        for(int i=1;i<=n;i++)
            for(int j=1;j<=m;j++){
                char ch[11];
                scanf("%d%s",&a[i][j],ch);
                if(ch[0]=='Y') vis[i][j]=true;
        }
        for(int i=1;i<=m;i++){
            int cnt=0;
            for(int j=n;j>=1;j--)
                if(vis[j][i]) s1[i][cnt]+=a[j][i];
                else ++cnt,s1[i][cnt]=s2[i][cnt]=s1[i][cnt-1]+a[j][i];
        }
        for(int i=1;i<=m;i++)
            for(int j=0;j<=k;j++)
                for(int g=0;g<=n&&g<=j;g++){
                    dp1[i][j]=max(dp1[i][j],dp1[i-1][j-g]+s1[i][g]);
                    if(g>0) dp2[i][j]=max(dp2[i][j],dp1[i-1][j-g]+s2[i][g]);
                    if(j-g>0) dp2[i][j]=max(dp2[i][j],dp2[i-1][j-g]+s1[i][g]);
                }
        printf("%d
    ",dp2[m][k]);
        return 0;
    }

    一个人的夜,我的心应该放在哪里。

  • 相关阅读:
    php实现频率限制
    手机号打码
    qxx项目大文件上传
    502错误
    mac 安装phpunit
    文件权限问题
    无题
    php安装redis扩展全
    linux中whereis、which、find、location的区别和用法
    php安装redis扩展
  • 原文地址:https://www.cnblogs.com/GTBD/p/9435663.html
Copyright © 2020-2023  润新知