比赛 |
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);
}