zoukankan      html  css  js  c++  java
  • bzoj1296

    题解:

    简单dp

    先每一行的列dp一下

    然后行的dp一下

    代码:

    #include<bits/stdc++.h>
    using namespace std;
    const int N=55;
    int n,m,T,f[N],g[N],cost[N][N],dp[N][N*N];
    char s[N][N];
    int main()
    {
        scanf("%d%d%d",&n,&m,&T);
        for (int i=1;i<=n;i++)scanf("%s",s[i]+1);
        for (int i=1;i<=n;i++)
         {
             for (int j=1;j<=m;j++)
              {
                  f[j]=f[j-1];
                  g[j]=g[j-1];
                  if (s[i][j]=='1')f[j]++;
                  else g[j]++;
              }
             memset(cost,0,sizeof cost);
             for (int j=1;j<=m;j++)
              for (int k=1;k<=j;k++)
               for (int l=1;l<=j;l++)
                cost[j][k]=max(cost[j][k],cost[l-1][k-1]+max(f[j]-f[l-1],g[j]-g[l-1]));
            for (int j=1;j<=T;j++)
             for (int k=1;k<=m&&k<=j;k++)
              dp[i][j]=max(dp[i][j],dp[i-1][j-k]+cost[m][k]);
         }
        printf("%d",dp[n][T]); 
    }
  • 相关阅读:
    将个人博客与github关联
    docker镜像制作
    perf命令
    vmstat命令
    ps命令
    top命令
    linux查看当前用户登陆信息
    .NET CORE应用程序启动
    WebAPI简介
    Redis-位图
  • 原文地址:https://www.cnblogs.com/xuanyiming/p/8486937.html
Copyright © 2011-2022 走看看