题目链接

毒瘤DP题

因为\((i,j)\)能不能敲取决于\((i-1,j)\)和\((i-1,j+1)\),所以一行一行地转移显然是有后效性的。

于是考虑从列入手。我们把这个三角形“左对齐”,变成一个直角三角形。

第\(i\)列第\(j\)个要取,则第\(i\)列前\(j-1\)个和第\(i+1\)列前\(j-1\)个肯定是都要取的。

于是设\(f[i][j][k]\)表示第\(i\)列第\(j\)个要取,且总共已经去了\(k\)个的最大得分,

我们枚举第\(i+1\)列取多少个,则有

\[f[i][j][k] = max(f[i][j][k], f[i + 1][p][k - j] + sum[i][j])
\]

其中\(p\in [j-1,n-i]\),\(sum[i][j]\)是预处理出来的第\(i\)前\(j\)个的前缀和。

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define Open(s) freopen(s".in","r",stdin);freopen(s".out","w",stdout);
#define Close fclose(stdin);fclose(stdout);
const int MAXN = 55;
const int MAXM = 1300;
int a[MAXN][MAXN], sum[MAXN][MAXN], f[MAXN][MAXN][MAXM];
int n, m, ans;
int main(){
Open("brike");
scanf("%d%d", &n, &m);
for(int i = 1; i <= n; ++i)
for(int j = n; j >= i; --j)
scanf("%d", &a[i][n - j + 1]);
for(int i = 1; i <= n; ++i)
for(int j = 1; j <= n - i + 1; ++j)
sum[i][j] = a[j][i] + sum[i][j - 1];
memset(f, -1, sizeof f);
for(int i = 1; i <= n; ++i) f[i][1][1] = a[1][i];
for(int i = n; i; --i)
for(int j = 0; j <= n - i + 1; ++j)
for(int k = j; k <= m; ++k)
for(int p = j - 1; p <= n - i; ++p)
if(p >= 0)
if(~f[i + 1][p][k - j])
f[i][j][k] = max(f[i][j][k], f[i + 1][p][k - j] + sum[i][j]);
for(int i = 1; i <= n; ++i)
for(int j = 0; j <= n - i + 1; ++j)
ans = max(ans, f[i][j][m]);
printf("%d\n", ans);
return 0;
}

【洛谷 P1437】 [HNOI2004]敲砖块 (DP)的更多相关文章

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

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

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

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

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

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

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

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

  5. [洛谷1437&Codevs1257]敲砖块<恶心的dp>

    题目链接:https://www.luogu.org/problem/show?pid=1437#sub http://codevs.cn/problem/1257/ 不得不说,这个题非常的恶心,在初 ...

  6. P1437 [HNOI2004]敲砖块

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

  7. luogu P1437 [HNOI2004]敲砖块

    三角形向右对齐后 你想打掉一个砖块,那么你必须打掉右上方的三角形,前缀和维护 若是第i列若是k个,那么它右边的那一列至少选了k-1个 f[i][j][k] 表示从后向前选到第 i 列第j个一共打了k次 ...

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

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

  9. 洛谷 P5279 - [ZJOI2019]麻将(dp 套 dp)

    洛谷题面传送门 一道 dp 套 dp 的 immortal tea 首先考虑如何判断一套牌是否已经胡牌了,考虑 \(dp\)​​​​​.我们考虑将所有牌按权值大小从大到小排成一列,那我们设 \(dp_ ...

  10. 【题解】HNOI2004敲砖块

    题目传送门:洛谷1437 决定要养成随手记录做过的题目的好习惯呀- 这道题目乍看起来和数字三角形有一点像,但是仔细分析就会发现,因为选定一个数所需要的条件和另一个数所需要的条件会有重复的部分,所以状态 ...

随机推荐

  1. android service笔记

    1.service 默认在主线程运行,所以不能在service中直接做访问网络,操作文件等耗时操作,要另外开启线程 2.通过startservice开启的服务,一旦服务开启,这个服务和开启他的调用者之 ...

  2. Scala学习笔记(三):基础知识

    有了可运行的环境,就需要写一些简单的语句来认识一下Scala,本文没有写那么详细,只是为了方便查看.唤起回忆 (1)变量的定义方法 Scala有两种变量 var val 注意:在解释器中,可以用一个之 ...

  3. Django admin源码剖析

    单例模式 单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在.当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场. ...

  4. CodeBlocks 3 使用设置

    使用MingW作为CB的默认编译器和wxWidgets进行编程,当然需要好好配置一番,因为mingw在windows下用起来着实没有win32原生态程序运行快,也没有他小,好处是借助wxwidgets ...

  5. VC++之运算符重载简单小结

    封装继承和多态是面向对象三大基本支柱.在面向对象系统中有两种编译方式:静态联编和动态联编静态联编:也叫早期联编:指系统在编译时就决定如何实现某一动作,提供了执行速度快的优点.动态联编:也叫滞后联编:指 ...

  6. mysql 数据库 exists 和count

    由于最近在使用exists是出现了一个小问题,但是在调试的时候费了不少时间,因为自己只是牢固造成,所以在在此记录,已提醒自己. mysql中exists 用法: 通过和主查询管理 以达到过滤的效果,如 ...

  7. android4.1 Wifi 浅析

    简单分析下wifi相关类,首先了解几个主要概念 AsyncChannel 简单理解: AsyncChannel,就是借助Messenger 机制,让两个不同的handler之间进行通信. AsyncC ...

  8. c# mysql blob数据类型

    1.采用stream流形式写入: #region 数据流转换成blob类型数据写入数据库 static public bool StreamToBlob(ref Stream stream, Odbc ...

  9. Mybatis学习系列(四)Mapper接口动态代理

    实现原理及规范 Mapper接口动态代理的方式需要手动编写Mapper接口,Mybatis框架将根据接口定义创建接口的动态代理对象,代理对象的方法体实现Mapper接口中定义的方法. 使用Mapper ...

  10. WCF 透明代理

    现在我们通过类似的原理创建一个用于模拟WCF服务端和客户端工作原理的模拟程序.[源代码从这里下载] 目录 一.基本的组件和执行流程 二.创建自定义HttpHandler实现对服务调用请求的处理 三.定 ...