三角形向右对齐后

你想打掉一个砖块,那么你必须打掉右上方的三角形,前缀和维护

若是第i列若是k个,那么它右边的那一列至少选了k-1个

f[i][j][k] 表示从后向前选到第 i 列第j个一共打了k次的分数

// luogu-judger-enable-o2
#include<cstdio>
#include<cstring>
#include<algorithm>
using std::max;
const int maxn = 57;
#define INF 0x7fffffff
inline int read()
{
int x=0,f=1;char c=getchar();
while(c<'0'||c>'9'){ if(c=='-')f=-1; c=getchar(); }
while(c<='9'&&c>='0')x=x*10+c-'0',c=getchar();
return x*f;
}
int n,m;
int g[maxn][maxn],s[maxn][maxn];
int f[maxn][maxn][2507];
int main()
{
n=read();m=read();
for(int i=1;i<=n;++i)
for(int j=1;j<=n-i+1;++j)
g[i][j]=read();
for(int i=1;i<=n;++i)
for(int j=1;j<=n-i+1;++j)
s[i][j]=s[i][j-1]+g[j][i];
for(int i=1;i<=n+1;++i)
for(int j=0;j<=n+1;++j)
for(int k=0;k<=m;++k)
f[i][j][k]=-INF;
f[n+1][0][0]=0;
int ans=0;
for(int i=n;i;--i)
for(int j=0;j<=n-i+1;++j)
for(int k=j;k<=m;++k) {
for(int l=max(0,j-1);l<=n-i;++l) {
if(f[i+1][l][k-j]!=-INF)
f[i][j][k]=max(f[i][j][k],f[i+1][l][k-j]+s[i][j]);
}
ans=max(ans,f[i][j][k]);
}
printf("%d\n",ans);
return 0;
}

luogu P1437 [HNOI2004]敲砖块的更多相关文章

  1. Luogu 1437 [HNOI2004]敲砖块 (动态规划)

    Luogu 1437 [HNOI2004]敲砖块 (动态规划) Description 在一个凹槽中放置了 n 层砖块.最上面的一层有n块砖,从上到下每层依次减少一块砖.每块砖都有一个分值,敲掉这块砖 ...

  2. 洛谷 P1437 [HNOI2004]敲砖块 解题报告

    P1437 [HNOI2004]敲砖块 题目描述 在一个凹槽中放置了 n 层砖块.最上面的一层有n 块砖,从上到下每层依次减少一块砖.每块砖 都有一个分值,敲掉这块砖就能得到相应的分值,如下所示. 1 ...

  3. P1437 [HNOI2004]敲砖块

    题目描述 在一个凹槽中放置了 n 层砖块.最上面的一层有n 块砖,从上到下每层依次减少一块砖.每块砖 都有一个分值,敲掉这块砖就能得到相应的分值,如下图所示. 14 15 4 3 23 33 33 7 ...

  4. 洛谷P1437 [HNOI2004]敲砖块(dp)

    题目背景 无 题目描述 在一个凹槽中放置了 n 层砖块.最上面的一层有n 块砖,从上到下每层依次减少一块砖.每块砖 都有一个分值,敲掉这块砖就能得到相应的分值,如下图所示. 14 15 4 3 23 ...

  5. yzoj P2343 & 洛谷 P1437 [HNOI2004]敲砖块

    题意 在一个凹槽中放置了N层砖块,最上面的一层油N块砖,从上到下每层一次减少一块砖.每块砖都有一个分值,敲掉这块砖就能得到相应的分值,如图所示. 如果你想敲掉第i层的第j块砖的话,若i=1,你可以直接 ...

  6. luogu P1437 [HNOI2004]尻♂砖块

    传送门 想明白了其实不难 强行瞎扯 这题的限制比较烦,导致了一行行转移几乎不能做(吧) 那么一列列转移呢? 设\(f_{i,j,k}\)表示前\(i\)列,取\(j\)个,其中第\(i\)列取从上往下 ...

  7. 2018.08.16 洛谷P1437 [HNOI2004]敲砖块(二维dp)

    传送门 看起来普通dp" role="presentation" style="position: relative;">dpdp像是有后效性的 ...

  8. 【洛谷 P1437】 [HNOI2004]敲砖块 (DP)

    题目链接 毒瘤DP题 因为\((i,j)\)能不能敲取决于\((i-1,j)\)和\((i-1,j+1)\),所以一行一行地转移显然是有后效性的. 于是考虑从列入手.我们把这个三角形"左对齐 ...

  9. [HNOI2004]敲砖块

    题目描述 在一个凹槽中放置了 n 层砖块.最上面的一层有n 块砖,从上到下每层依次减少一块砖.每块砖 都有一个分值,敲掉这块砖就能得到相应的分值,如下图所示. 14 15 4 3 23 33 33 7 ...

随机推荐

  1. JavaScript简易学习笔记

    学习地址:http://www.w3school.com.cn/js/index.asp 文字版: https://github.com/songzhenhua/github/blob/master/ ...

  2. UnitOfWork知多少 【转】

    原文链接:https://www.cnblogs.com/sheng-jie/p/7416302.html 1. 引言 Maintains a list of objects affected by ...

  3. C#向上转型与向下转型(转)

    原文地址:https://blog.csdn.net/wangqingbo0829/article/details/48474173 向上转型:将子类对象转为父类对象.此处父类对象可以是接口. 向下转 ...

  4. (笔记) RealTimeRender[实时渲染] C2

    @author: 白袍小道 @来源:RealTime Render @建议书籍:龙书.RealTimeR第四版.GPUGem和PRO (来源:暗影不解释) 引点 这一章关注的管线中的管道功能,而非实现 ...

  5. 1090 Highest Price in Supply Chain (25 分)(树的遍历)

    求所有叶节点中的最高价以及这个价格的叶节点个数 #include<bits/stdc++.h> using namespace std; ; vector<int>mp[N]; ...

  6. java单例模式(类只能创建唯一对象)

    //饿汉式 class Single { private static final Single s= new Single(); private Single(){} public static S ...

  7. ExtJs学习之MessAgeBox的使用

    1.Ext.MessageBox.alert() 调用格式: alert( String title, String msg, [Function fn], [Object scope] ) 参数说明 ...

  8. 团队项目-第九次scrum 会议

    时间:11.5 时长:40分钟 地点:F楼1039教室 工作情况 团队成员 已完成任务 待完成任务 解小锐 完成员工commit函数的数值函数编写 完成多种招聘方式的逻辑编写 陈鑫 实现游戏的暂停功能 ...

  9. lowercase calligraphic letters

    本系列文章由 @yhl_leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/53454402 LaTeX公式表达中,经 ...

  10. 什么是SQL注入?(理解)

    SQL注入攻击是黑客对数据库进行攻击的常用手段之一.一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,注入者可以在表单中输入一段数据库查询代码并提交,程序将提交的信息拼凑生成一个完整s ...