->题目链接

洛谷 P1174 打砖块

洛谷 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\n",dp2[m][k]);
    return 0;
}
AC

相关文章:

  • 2021-11-26
  • 2021-07-19
  • 2021-04-26
  • 2022-12-23
  • 2021-07-28
  • 2021-12-18
  • 2021-08-09
猜你喜欢
  • 2022-12-23
  • 2021-09-26
  • 2022-12-23
  • 2021-04-07
  • 2021-06-30
  • 2021-12-20
相关资源
相似解决方案