• 【Dp】Bzoj1296 [SCOI2009] 粉刷匠


    Description

    windy有 N 条木板需要被粉刷。 每条木板被分为 M 个格子。 每个格子要被刷成红色或蓝色。 windy每次粉刷,只能选择一条木板上一段连续的格子,然后涂上一种颜色。 每个格子最多只能被粉刷一次。 如果windy只能粉刷 T 次,他最多能正确粉刷多少格子? 一个格子如果未被粉刷或者被粉刷错颜色,就算错误粉刷。

    Input

    输入文件paint.in第一行包含三个整数,N M T。 接下来有N行,每行一个长度为M的字符串,'0'表示红色,'1'表示蓝色。

    Output

    输出文件paint.out包含一个整数,最多能正确粉刷的格子数。

    Sample Input

    3 6 3
    111111
    000000
    001100

    Sample Output

    16

    HINT

    30%的数据,满足 1 <= N,M <= 10 ; 0 <= T <= 100 。
    100%的数据,满足 1 <= N,M <= 50 ; 0 <= T <= 2500 。

     
    煞笔Dp题
    做两次Dp
    一次算每一行的最优选择(行于行无关分开Dp即可)
    二次算总的最优选择 转移时枚举每行用多少次
     
    算分数的时候巧用前缀和
     
    /*感觉我写Dp还是不够溜啊
    总是觉得这样会冗余计算或本来就是一次操作强行算两次
    但没必要管那么多
    自然会统计出最优解的*/
     
    秒之 刷水好欢乐
     
    #include<cstdio>
    #include<algorithm>
    using namespace std;
    const int maxn=55,maxt=2505;
    
    int mark(int a,int b){
        return max(a-b,b);
    }
    
    int n,m,t;
    int d[maxn][maxn][maxn],f[maxn][maxt];
    int c[maxn][maxn];
    char s[maxn][maxn];
    
    int getC(){
        for(int i=1;i<=n;i++)
            for(int j=1;j<=m;j++)
                c[i][j]=c[i][j-1]+s[i][j]-'0';
    }
    
    int getD(){
        for(int i=1;i<=n;i++)
            for(int j=1;j<=m;j++)
                for(int k=1;k<=m;k++)
                    for(int x=0;x<j;x++)
                        d[i][j][k]=max(d[i][j][k],d[i][x][k-1]+mark(j-x,c[i][j]-c[i][x]));
    }
    
    int getF(){
        for(int i=1;i<=n;i++)
            for(int j=1;j<=t;j++)
                for(int k=1;k<=m&&k<=j;k++)
                    f[i][j]=max(f[i][j],f[i-1][j-k]+d[i][m][k]);
    }
    
    int main(){
        scanf("%d%d%d",&n,&m,&t);
        for(int i=1;i<=n;i++)
            scanf("%s",s[i]+1);
        
        getC();
        getD();
        getF();
        printf("%d
    ",f[n][t]);
        return 0;
    }
     
     
  • 相关阅读:
    【读书笔记】iOS-照相机与摄像头
    【读书笔记】iOS-加速计与陀螺仪
    【读书笔记】iOS-手势识别
    【读书笔记】iOS-移动开发
    【读书笔记】iOS-配件
    iOS开发UI篇—核心动画(转场动画和组动画)
    iOS开发UI篇—核心动画(关键帧动画)
    iOS开发UI篇—核心动画(基础动画)
    iOS开发UI篇—核心动画简介
    iOS开发UI篇—CAlayer(自定义layer)
  • 原文地址:https://www.cnblogs.com/xkui/p/4531229.html
Copyright © 2020-2023  润新知