非常巧妙的\(dp\)顺序

这道题如果按照最正常的顺序来\(dp\)的话,显然是没有办法做的,后效性太大了

所以我们可以巧妙的改变\(dp\)的顺序

我们注意到一个位置\((i,j)\)要被打到的话就必须将其右上方的所有砖块都打掉,于是我们我们设\(dp[i][j][k]\)表示打到了\((i,j)\)这个位置一共打了\(k\)个,其中\((i,j)\)被打掉了的最大值

如果我们改变一下\(dp\)顺序,从右向左对每列从上到下做\(DP\),我们就可以转移了

方程

\[dp[i][j][k]=max(dp[p][j+1][k-i]+\sum_{t=1}^{j}a[i][t])
\]

我们枚举左边那一列,如果打掉左边那一列上的\((p,j+1)\)的位置,那么就相当于\((i,j)\)左边被清空了,于是我们在打掉\((i,j)\)往上的一列就好了

#include<iostream>
#include<cstring>
#include<cstdio>
#define re register
#define max(a,b) ((a)>(b)?(a):(b))
#define maxn 51
inline int read()
{
char c=getchar();
int x=0;
while(c<'0'||c>'9') c=getchar();
while(c>='0'&&c<='9')
x=(x<<3)+(x<<1)+c-48,c=getchar();
return x;
}
int dp[maxn][maxn][1505];
int a[maxn][maxn];
int n,m,ans,tot,sum;
int main()
{
n=read(),m=read();
for(re int i=1;i<=n;i++)
for(re int j=1;j<=n-i+1;j++)
a[i][j]=read();
memset(dp,-20,sizeof(dp));
tot=1;
dp[0][n+1][0]=0;
for(re int i=1;i<=n;i++) dp[0][i][0]=0;
for(re int j=n;j>=1;--j,sum=0)
for(re int i=0;i<=n-j+1;i++)
{
tot++;
sum+=a[i][j];
for(re int k=i;k<=m;k++)
{
if(k>tot) break;
for(re int p=max(0,i-1);p<=n-j;p++)
dp[i][j][k]=max(dp[i][j][k],dp[p][j+1][k-i]+sum);
ans=max(dp[i][j][k],ans);
}
}
std::cout<<ans;
return 0;
}

最新文章

  1. Entity Framework 数据库初始化的三种方法
  2. Server.Transfer 和 Response.Redirect 用法区别
  3. 小白Linux入门 一
  4. Creating Custom Connector Sending Claims with SharePoint 2013
  5. [转]深入理解Java 8 Lambda(类库篇——Streams API,Collectors和并行)
  6. 浅谈html5网页内嵌视频
  7. csv格式
  8. redis在windows上的安装
  9. Oracle RAC ORACLE_SID的设置,报错(ORA-01078, LRM-00109)
  10. 对象序列化XML
  11. JSP 登录页面
  12. 转:Git_Windows 系统下Git安装图解
  13. 国内外移动端web适配屏幕方案
  14. SZU:B47 Big Integer I
  15. Entity Framework : The model backing the &#39;&#39; context has changed since the database was created
  16. vue2 vue-router 组装
  17. 多节点,多线程下发订单,使用zookeeper分布式锁机制保证订单正确接入oms系统
  18. Android--UI之ImageSwitcher
  19. HTTP笔记01-http相关的基础知识
  20. EntityFramework Code-First 简易教程(四)-------继承策略

热门文章

  1. dapper 多对多查询对象和对象列表
  2. PL/SQL之游标的使用
  3. MySQL---6、可视化工具工具之SQLYog安装配置
  4. 在Asp.Net Core中取得物理路径
  5. [javaSE] 网络编程(TCP服务端客户端互访阻塞)
  6. 【Java】短信信息提取设计
  7. golang 记录函数执行耗时的一个简单方法。
  8. C# 设计模式&#183;创建型模式
  9. css实现修改默认滚动条样式
  10. 使用PuTTy在CentOS下安装web.py与简单的文件传输