比赛 20130923 评测结果 AAAAAAAAAA
题目名称 打砖块 最终得分 100
用户昵称 神利·代目 运行时间 0.191 s
代码语言 C++ 内存使用 6.72 MiB
提交时间 2015-10-12 19:30:58
显示代码纯文本
#include<cstdio>
#include<cstring>
int n,m,ans,o[55][55],s[55][55],f[55][55][555];
int main()
{
    freopen("brike.in","r",stdin);
    freopen("brike.out","w",stdout);
    scanf("%d%d",&n,&m);
    for(int j=1;j<=n;++j)
        for(int i=n-j+1;i;--i)
        {
            scanf("%d",&o[i][j]);
            s[i][j]=s[i][j-1]+o[i][j];
        }
    memset(f,-0x3f,sizeof(f));
    f[n+1][0][0]=0;
    for(int i=n;i;--i)
    {
        for(int j=0;j<=n-i+1;++j)
            for(int k=0;k<=m;++k)
                if(f[i][0][k]<f[i+1][j][k])
                    f[i][0][k]=f[i+1][j][k];
        for(int j=1;j<=n-i+1;++j)
            for(int k=j;k<=m;++k)
                for(int l=j-1;l<=n-i;++l)
                    if(f[i][j][k]<f[i+1][l][k-j]+s[i][j])
                        f[i][j][k]=f[i+1][l][k-j]+s[i][j];
    }
    for(int i=0;i<=n;++i)
        for(int j=0;j<=n;++j)
            if(ans<f[i][j][m])
                ans=f[i][j][m];
    printf("%d",ans);
}