首先通过这道题我收获了一个知识,那就是deque可以直接赋值,作用和vector类似就是复制一个一摸一样的deque,很好用,越来越发现deque眉清目秀了起来。以后deque可能是我最常用的STL结构了。毕竟queue、stack都用deque来实现明显更方便而且不会多占用什么空间的。

一眼便能看出,这道题用记忆化搜索+动态申请空间应该能大大大大大地减少所用空间,应该还能减少时间,不过大体思路一想便知,而且记搜,本就是自己更熟悉的写法,便也就不写了。

这道题的状态转移不复杂,甚至记录最优解过程这本身也不复杂(由于数据范围过小,不用记搜+空间优化也能过所以才说记录最优解不难,但如果数据范围大一些逼迫我们选择记搜式的存储路径那才算是有些难度了)。这俩者加起来充其量是个黄+的难度,算不上是绿题。但是有一个小小的坑点,那就是非法情况应该排除,这个点不容易想到因此容易导致WA。加上这个点,这道题评个绿还是很公正的。

另外,总结一下排除非法情况的方法,那就是在dp存储最优解的过程中只要把非法情况设置为“可以采取但是效果极其极其差”即可,这样便能让程序发自内心的“可以选择但不选择”。而非直接强迫程序不准选择。这么做好处很明显,明显减少编码复杂度和思维复杂度和出bug的可能性。

补一句,做完题后翻题解看到有人把二维dp数组压成了一维滚动数组,虽然时间复杂度不变但是空间复杂度大大减少,而且基于滚动数组、存储路径的队列组也可以滚动起来,这样就只需要极少的空间占用了,比我之前想的那个记搜+动态空间的方法能减少更多的空间占用而且写起来很简单。光是看到“可以滚动数组”的提议没往下看就瞬间知道该怎么做了,毕竟我的那个状态转移方程明显一看就能写成滚动数组的形式嘛,看来要提高警惕性呀,以后写完状态转移方程后一定要评估一下能否写成滚动数组节约空间,并且分析下空间限制如何有没有必要这么做

#include <iostream>
#include <cstring>
#include <deque>
using namespace std;
int F,V,dp[105][105],a[105][105];
deque<int> q[105][105];
signed main()
{
memset(dp,0,sizeof(dp));
cin>>F>>V;
for(int i=1;i<=F;i++)
for(int j=1;j<=V;j++)
cin>>a[i][j];
for(int i=1;i<=F;i++)dp[i][0]=-99999999;
for(int i=1;i<=F;i++)
{
for(int j=1;j<=V;j++)
{
if(i>j)dp[i][j]=-99999999;
else if(dp[i-1][j-1]+a[i][j]>=dp[i][j-1])
{
dp[i][j]=dp[i-1][j-1]+a[i][j];
q[i][j]=q[i-1][j-1];
q[i][j].push_back(j);
}
else
{
dp[i][j]=dp[i][j-1];
q[i][j]=q[i][j-1];
}
}
}
cout<<dp[F][V]<<endl;
for(auto p=q[F][V].begin();p!=q[F][V].end();p++)
cout<<*p<<' ';
return 0;
}

P1854-DP【绿】的更多相关文章

  1. 「疫期集训day4」硝烟

    那真是一阵恐怖的炮击(that boomed booms),响亮的炮音(that noise),滚滚的硝烟(that smoke),熊熊的火焰在围绕着我们前进...小心前进(go and be car ...

  2. 【洛谷P1854】花店橱窗 线性dp+路径输出

    题目大意:给定 N 个数字,编号分别从 1 - N,M 个位置,N 个数字按照相对大小顺序放在 M 个位置里,每个数放在每个位置上有一个对答案的贡献值,求一种摆放方式使得贡献值最大. 题解:一道典型的 ...

  3. 洛谷 P1854 花店橱窗布置 【dp】

    题目描述 某花店现有F束花,每一束花的品种都不一样,同时至少有同样数量的花瓶,被按顺序摆成一行,花瓶的位置是固定的,从左到右按1到V顺序编号,V是花瓶的数目.花束可以移动,并且每束花用1到F的整数标识 ...

  4. 【Luogu】P1854花店橱窗布置(DP)

    照例良心题目链接 此题使用f[i][j]表示前i束花放进前j个花瓶的时候的最大值.转移方程如下 f[i][j]=max(f[i][j-1],f[i-1][j-1]+que[i][j]) 其中que[i ...

  5. DP擎天

    DP! 黄题: 洛谷P2101 命运石之门的选择 假装是DP(分治 + ST表) CF 982C Cut 'em all! 树形贪心 洛谷P1020 导弹拦截 单调队列水题 绿题: 洛谷P1594 护 ...

  6. 【BZOJ-1260】涂色paint 区间DP

    1260: [CQOI2007]涂色paint Time Limit: 30 Sec  Memory Limit: 64 MBSubmit: 1147  Solved: 698[Submit][Sta ...

  7. hdu4939 Stupid Tower Defense (DP)

    2014多校7 第二水的题 4939 Stupid Tower Defense Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 131 ...

  8. 洛谷P2014 选课 (树形dp)

    10月1日更新.题目:在大学里每个学生,为了达到一定的学分,必须从很多课程里选择一些课程来学习,在课程里有些课程必须在某些课程之前学习,如高等数学总是在其它课程之前学习.现在有N门功课,每门课有个学分 ...

  9. 【DP】BZOJ 1260: [CQOI2007]涂色paint

    1260: [CQOI2007]涂色paint Time Limit: 30 Sec  Memory Limit: 64 MBSubmit: 893  Solved: 540[Submit][Stat ...

  10. 周赛C题 LightOJ 1047 (DP)

    C - C Time Limit:500MS     Memory Limit:32768KB     64bit IO Format:%lld & %llu   Description Th ...

随机推荐

  1. [USACO2007NOVS] Cow Hurdles S

    题目描述 Farmer John wants the cows to prepare for the county jumping competition, so Bessie and the gan ...

  2. Mybatis大于、小于....转义写法

    描述 转义前 转义后 大于 > > 大于等于 >= >= 小于 < < 小于等于 <= <= 和 & & 单引号 ' &apos ...

  3. bash shell笔记整理——tac命令

    tac命令的作用 tac命令其实和cat命令的唯一不同的地方在于它是倒序取得给定的文件或者标准输入再输出到标准输出中. 细心看tac就是cat倒着过来写而已. tac命令语法 语法: tac [FIL ...

  4. 编写.NET的Dockerfile文件构建镜像

    创建一个WebApi项目,并且创建一个Dockerfile空文件,添加以下代码,7.0代表的你项目使用的SDK的版本,构建的时候也需要选择好指定的镜像tag FROM mcr.microsoft.co ...

  5. Pikachu漏洞靶场 File Inclusion(文件包含漏洞)

    File Inclusion(文件包含漏洞) 本地文件包含 url: 192.168.171.30/pikachu/vul/fileinclude/fi_local.php?filename=file ...

  6. Baidu Comate实践指南,惊艳了我...

    1 啥是Baidu Comate Comate是百度开发的编程大模型工具,它基于文心大模型,结合百度积累多年的编程现场大数据和外部优秀开源数据,为我们生成更符合实际研发场景的优质代码:它能提升编码效率 ...

  7. 这一次,弄明白JS中的文件相关(一):概念篇

    概念是学习的基础.在学习JS中的文件操作之前,先把文件相关的各种概念搞清楚,很有好处. 1. 二进制: 计算机硬件仅能处理和存储二进制数据,所以不管是你正在写的代码,还是你硬盘里的小姐姐,都是以二进制 ...

  8. 昇腾CANN 7.0 黑科技:大模型训练性能优化之道

    本文分享自华为云社区<昇腾CANN 7.0 黑科技:大模型训练性能优化之道>,作者: 昇腾CANN . 目前,大模型凭借超强的学习能力,已经在搜索.推荐.智能交互.AIGC.生产流程变革. ...

  9. 云图说|应用编排服务AOS,助力应用上云自动化

    如今,企业想要扩大业务.进行创新,上云已经成为了必经之路.应用编排服务AOS为企业提供应用上云的自动化能力,支持编排华为云上的主流云服务,将复杂的云服务资源配置和应用部署配置通过模板描述,从而实现在华 ...

  10. 云图说 | 快速创建一个kubernetes集群

    摘要:3分钟快速创建您的第一个kubernetes虚拟机集群. 随着应用程序开发向基于容器的方向发展,编排和管理资源的需求变得越来越重要.Kubernetes是一个开源的.功能强大的容器编排系统,用于 ...