传送门

想明白了其实不难 强行瞎扯

这题的限制比较烦,导致了一行行转移几乎不能做(吧)

那么一列列转移呢?

设\(f_{i,j,k}\)表示前\(i\)列,取\(j\)个,其中第\(i\)列取从上往下前\(k\)个的答案

因为要取到一个砖块,要把该砖块上方以及右上方的先取走,那么如果这一列取\(k\)个,下一列最少取\(k-1\)个;反过来,对于列\(i\),上一列的\(k\)的取值范围为\([1,k+1]\),是个前缀,可以前缀最大值优化

写个方程就没了

// luogu-judger-enable-o2
#include<bits/stdc++.h>
#define LL long long
#define il inline
#define re register
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
#define inf 999999999 using namespace std;
const int N=50+10;
il LL rd()
{
re LL x=0,w=1;re char ch=0;
while(ch<'0'||ch>'9') {if(ch=='-') w=-1;ch=getchar();}
while(ch>='0'&&ch<='9') {x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
return x*w;
}
int n,m,a[N][N],f[N][N*N][N]; //dp用的数组同时用来记录前缀k最大值(懒) int main()
{
n=rd(),m=rd();
for(int i=1;i<=n;i++)
for(int j=1;j<=n-i+1;j++)
a[i][j]=a[i-1][j]+rd(); //前缀和存储
for(int i=1,t=n;i<=n;i++,t+=n-i+1,t=min(t,m))
for(int j=1;j<=t;j++)
{
f[i][j][0]=max(f[i-1][j][0],f[i-1][j][1]);
for(int k=1;k<=n-i+1;k++)
{
if(j-k>=0) f[i][j][k]=max(f[i][j][k],f[i-1][j-k][k+1]+a[k][i]);
}
for(int k=1;k<=n-i+1;k++) f[i][j][k]=max(f[i][j][k],f[i][j][k-1]);
}
printf("%d\n",max(f[n][m][0],f[n][m][1]));
return 0;
}

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

  1. luogu P1437 [HNOI2004]敲砖块

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

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

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

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

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

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

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

  5. P1437 [HNOI2004]敲砖块

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

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

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

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

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

  8. [HNOI2004] 打砖块

    1292. [HNOI2004] 打砖块 ★★   输入文件:brike.in   输出文件:brike.out   简单对比时间限制:1 s   内存限制:128 MB [题目描述] 在一个凹槽中放 ...

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

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

随机推荐

  1. delphi获取一个窗口的所有子窗口(包括嵌套)

    unit Unit1; interface usesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, ...

  2. luogu1856

    P1856 [USACO5.5]矩形周长Picture 题目背景 墙上贴着许多形状相同的海报.照片.它们的边都是水平和垂直的.每个矩形图片可能部分或全部的覆盖了其他图片.所有矩形合并后的边长称为周长. ...

  3. BZOJ4836 二元运算(分治FFT)

    设A(n)为a中n的个数,B(n)为b中n的个数.如果只考虑加法显然是一个卷积,减法翻转一下也显然是一个卷积. 问题在于两者都有.容易想到分开处理.那么可以考虑分治.即对于值域区间[l,r],分别计算 ...

  4. ajax跨域,携带cookie

    解决方案很简单. 直接上代码: web.xml中: 添加了 cors来解决跨域 (奇怪的是,credentials设置为false.反正这个是照搬的...)   <filter>     ...

  5. 洛谷P3345 [ZJOI2015]幻想乡战略游戏(动态点分治,树的重心,二分查找,Tarjan-LCA,树上差分)

    洛谷题目传送门 动态点分治小白,光是因为思路不清晰就耗费了不知道多少时间去gang这题,所以还是来理理思路吧. 一个树\(T\)里面\(\sum\limits_{v\in T} D_vdist(u,v ...

  6. Leetcode 28.实现strStr() By Python

    实现 strStr() 函数. 给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始).如果不存在,则返 ...

  7. 自学Linux Shell17.1-正则表达式

    点击返回 自学Linux命令行与Shell脚本之路 17.1-正则表达式 1. 正则表达式概念 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个“ ...

  8. SharePoint 2013 Newsfeed 没有出现的解决方法

    按照这个guide配置mysite: http://technet.microsoft.com/en-us/library/ee624362(v=office.15).aspx 但是newsfeed页 ...

  9. 【POJ3666】Making the Grade 离散化+DP

    学到了一个引理:在满足S最小化的条件下,一定存在一种构造序列B的方案,使得序列B中的数值都来自于A中.(数学归纳法+中位数定理得证) 对于状态的表示来说,首先肯定有一个 i ,表示选到了第 i 个数时 ...

  10. 织梦dedecms自定义搜索可以按照附加表字段进行搜索

    因为需要在网上搜索了一下找到此修改方法: 首先 是新建模型:商标信息 模型:附加表为dede_shangbiao ,附加字段先添加了2个,sbID(商标ID)和chuangyi(创意说明)然后 打开需 ...