• BZOJ 1296: [SCOI2009]粉刷匠


                                       BZOJ 1296: [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 。

    SOLUTION:

    我觉得这一题的做法很妙阿。

    对于每一行我们更新一次f[i][j],表示这一行的前i个格子刷j次的最大值是多少。

    然后用f 背包更新 dp[p][j],即前p行刷j次的最大值。感觉我讲的好糊啊,但代码还是很好理解的。

     1 #include<iostream>
     2 #include<cstring>
     3 #include<cstdio>
     4 #include<algorithm>
     5 using namespace std;
     6 char s[100];
     7 int a[100],f[100][100],dp[100][2510];
     8 int n,m,t;
     9 int main()
    10 {
    11     int ans;
    12     scanf("%d%d%d",&n,&m,&t);
    13     for(int i=1;i<=n;i++)
    14     {
    15         memset(f,0,sizeof(f));
    16         scanf("%s",&s);
    17         for(int j=1;j<=m;j++) a[j]=a[j-1]+s[j-1]-'0';
    18         for(int j=1;j<=m;j++)
    19         for(int k=1;k<=m;k++)
    20         {
    21             for(int p=0;p<k;p++)
    22             f[k][j]=max(f[k][j],f[p][j-1]+max(a[k]-a[p],k-p-a[k]+a[p]));
    23         }
    24         for(int j=1;j<=t;j++)
    25          for(int k=1;k<=min(j,m);k++)
    26         dp[i][j]=max(dp[i][j],dp[i-1][j-k]+f[m][k]);
    27         
    28    }
    29    for(int i=1;i<=t;i++) ans=max(ans,dp[n][i]);
    30    printf("%d",ans);
    31    return 0;
    32 }
    View Code

     以上By LQ_double

  • 相关阅读:
    SonarQube 插件之 Issues Report & SonarLint 的配置及使用
    Docker搭建自己的Gitlab CI Runner
    Nexus OSS 3 搭建并配置使用 Docker & Git LFS 仓库
    js字符串去掉回车和空格
    使用QtCreator来进行UML建模
    Qt字符串转二维码字符串
    C++10进制转16进制字符串互转
    Qt设置控件透明度
    Qt在槽函数里判断是哪个对象触发的信号
    Qt求极值
  • 原文地址:https://www.cnblogs.com/LQ-double/p/5975124.html
Copyright © 2020-2023  润新知