zoukankan      html  css  js  c++  java
  • 【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;
    }
     
     
  • 相关阅读:
    枚举和字符串之间的转换 [转帖]
    escape,encodeURI,encodeURIComponent函数比较[转帖]
    .net中的Provider模式 [转帖]
    ogg转到mp3
    四季养生(樊正伦教授)
    JavaScript高阶之路
    Python初识
    理解error和exception之间的区别(转)
    一些有用的话
    《爱在雨季》片尾曲
  • 原文地址:https://www.cnblogs.com/xkui/p/4531229.html
Copyright © 2011-2022 走看看