P1854-DP【绿】
首先通过这道题我收获了一个知识,那就是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【绿】的更多相关文章
- 「疫期集训day4」硝烟
那真是一阵恐怖的炮击(that boomed booms),响亮的炮音(that noise),滚滚的硝烟(that smoke),熊熊的火焰在围绕着我们前进...小心前进(go and be car ...
- 【洛谷P1854】花店橱窗 线性dp+路径输出
题目大意:给定 N 个数字,编号分别从 1 - N,M 个位置,N 个数字按照相对大小顺序放在 M 个位置里,每个数放在每个位置上有一个对答案的贡献值,求一种摆放方式使得贡献值最大. 题解:一道典型的 ...
- 洛谷 P1854 花店橱窗布置 【dp】
题目描述 某花店现有F束花,每一束花的品种都不一样,同时至少有同样数量的花瓶,被按顺序摆成一行,花瓶的位置是固定的,从左到右按1到V顺序编号,V是花瓶的数目.花束可以移动,并且每束花用1到F的整数标识 ...
- 【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 ...
- DP擎天
DP! 黄题: 洛谷P2101 命运石之门的选择 假装是DP(分治 + ST表) CF 982C Cut 'em all! 树形贪心 洛谷P1020 导弹拦截 单调队列水题 绿题: 洛谷P1594 护 ...
- 【BZOJ-1260】涂色paint 区间DP
1260: [CQOI2007]涂色paint Time Limit: 30 Sec Memory Limit: 64 MBSubmit: 1147 Solved: 698[Submit][Sta ...
- hdu4939 Stupid Tower Defense (DP)
2014多校7 第二水的题 4939 Stupid Tower Defense Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 131 ...
- 洛谷P2014 选课 (树形dp)
10月1日更新.题目:在大学里每个学生,为了达到一定的学分,必须从很多课程里选择一些课程来学习,在课程里有些课程必须在某些课程之前学习,如高等数学总是在其它课程之前学习.现在有N门功课,每门课有个学分 ...
- 【DP】BZOJ 1260: [CQOI2007]涂色paint
1260: [CQOI2007]涂色paint Time Limit: 30 Sec Memory Limit: 64 MBSubmit: 893 Solved: 540[Submit][Stat ...
- 周赛C题 LightOJ 1047 (DP)
C - C Time Limit:500MS Memory Limit:32768KB 64bit IO Format:%lld & %llu Description Th ...
随机推荐
- Elasticsearch入门到进阶
Elasticsearch 一.Elasticsearch 是什么(中文官网)? Elasticsearch 是一个分布式的免费开源搜索和分析引擎,适用于包括文本.数字.地理空间.结构化和非结构化数据 ...
- RISC-V系列单片机快速入门指南
如何获取芯片开发资料 方法一:按型号选择 我们更推荐采用按型号选择的方法,获取所对应型号芯片的开发资料,这能有效降低错误使用资料的风险! 沁恒官网首页的产品中心,点击青稞 RISC-V 通用系列,可跳 ...
- 牛客小白月赛2 F题黑黑白白 (博弈或dfs)
题目链接:https://www.nowcoder.com/acm/contest/86/F 解题思路:赛后看博客都说是sg函数.emmm,后面看了别人代码dfs也可以,只要找到一条能赢的路就可以. ...
- Scrapy集成selenium-案例-淘宝首页推荐商品获取
scrapy特性就是效率高,异步,如果非要集成selenium实际上意义不是特别大....因为selenium慢.... 案例:淘宝首页推荐商品的标题获取 爬虫类 toabao.py import s ...
- 单位换算详解:bit、Byte、bps、Bps、pps、Gbps的单位详细说明及换算
当谈论计算机存储和数据传输时,"bit"(比特)和"Byte"(字节)是两个常见的术语,它们具有不同的含义和用途. 位(bit):"位"来自 ...
- .NET周报【10月最后一期 2022-11-01】
精选要闻 .NET 7 NativeAOT比.NET单文件发布文件小80% https://twitter.com/JamesNK/status/1584919726861737984?s=20&am ...
- 基于DAYU的实时作业开发,分分钟搭建企业个性化推荐平台
摘要:搭建这个平台最费时耗力的事莫过于对批.流作业的编排,作业组织管理以及任务调度了.但是这一切,用DAYU的数据开发功能几个任务可通通搞定. 大多数电商类企业都会搭建自己的个性化推荐系统,利用自己拥 ...
- GaussDB拿下的安全认证CC EAL4+究竟有多难?
摘要:近日,经过全球知名独立认证机构SGS Brightsight实验室的安全评估,华为云GaussDB企业级分布式数据库内核获得全球权威信息技术安全性评估标准CC EAL4+级别认证 本文分享自华为 ...
- 云图说|华为HiLens云上管理平台 花样管理多种端侧设备
摘要:华为HiLens作为端云协同多模态AI开发应用平台,支持对接和管理多种端侧计算设备,帮助用户开发多模态AI应用并下发到端侧设备,实现多场景的智能化解决方案. 本文分享自华为云社区<[云图说 ...
- OpenHarmony移植案例:如何适配服务启动引导部件bootstrap_lite
摘要:本文介绍了startup子系统之bootstrap_lite服务启动引导部件的移植适配案例及原理. 本文分享自华为云社区<OpenHarmony移植案例与原理 - startup子系统之b ...