首页 > 其他分享 >P1854-DP【绿】

P1854-DP【绿】

时间:2023-12-09 12:12:05浏览次数:24  
标签:deque int 这道题 DP include P1854 dp 105

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

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

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

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

#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;
}

标签:deque,int,这道题,DP,include,P1854,dp,105
From: https://www.cnblogs.com/gongkai/p/17890745.html

相关文章

  • P1541-DP【绿】
    刚开始理解错题意了,题中说“玩家每次需要从所有的爬行卡片中选择一张之前没有使用过的爬行卡片”指的是不能用同一张卡片,我给理解成不能连续用同一种卡片了。后来想想其实题目中的说法歧义不大,是我粗心才导致看错的。最终我看错的导致了题目难度更高一些,偏偏写完了更高难度的题之......
  • 既然UDP更快,为啥这么多年一直用TCP ?
    你们好啊,我是老杨。有点基本技术常识的粉丝朋友都知道,UDP肯定是比TCP快的。很多人对TCP和UDP的了解很浅,直到自己真的经历了一些通信项目之后,你才会愿意根据实际情况埋头苦学,企图“速成”一下。要是问你为什么快,我相信大多数人,也是能从各个角度,说上几句有的没的。但是,既然如此,为什么......
  • centos安装xrdp服务,可以使用系统用户mstsc连接
    Centos6安装依赖yuminstall-yautoconfautomakelibtoolpkg-configopenssl-develpam-devellibjpeg-develfuse-develTurboJPEGlibX11-devellibXfixes-devellibXrandr-develnasmbinutilsredhat-lsb-coreCentos7安装依赖yuminstall-yfingercmakepatchgccma......
  • 构建用于复杂数据处理的高效UDP服务器和客户端
    title:构建用于复杂数据处理的高效UDP服务器和客户端banner_img:https://cdn.studyinglover.com/pic/2023/12/334c0c129076533308cbc7e03f8c55be.pngdate:2023-12-723:03:00tags:-踩坑构建用于复杂数据处理的高效UDP服务器和客户端引言在当今快速发展的网络通信世界......
  • P1725-DP【绿】
    这道题最开始我用记搜写的,然后WA了一些点,后来看了半天才发现是数组开小了,原来他给了两个数据范围,一个是60%数据的数据范围,另一个是100%数据的数据范围。我没仔细看,没看见后面那行,把60%数据当成本题数据范围了....自然WA了(不过有点好奇为什么不是RE,但是不重要,这种情况不罕见)然后,增......
  • 如何在CentOS7 安装 XRDP 远程桌面服务器
    1)图形界面安装CentOS7没有图形化操作可能对很多人来说都不太习惯,下面我们来为CentOS7安装图形化界面,本文以安装GNOME图形化为例**写在安装前:**如果你的CentOS7是最小化安装,默认都是不带XWINDOWS的配置公网Yum源mkdir/etc/yum.repos.d/backupmv/etc/yum.repo......
  • 树的中心——树形dp/换根dp启蒙
    请你在树中找到一个点,使得该点到树中其他结点的最远距离最近。这个点被称为树的中心。题解:https://www.cnblogs.com/dx123/p/17302104.html评测:https://www.acwing.com/problem/content/1075/暴力做法是以每个点为根,求出从根向下走的最远距离,这个过程需要做n遍,每一遍dfs的复杂......
  • 网络通信、UDP通信、TCP通信、BS架构模拟、URL了解
    网络编程可以让程序与网络上的其他设备中的程序进行数据交互所以,我们学习网络编程的主要目的就是为了实现网络通信网络通信网络通信基本模式常见的通信模式有如下2种形式:Client-Server(Cs)、Browser/Server(Bs)Client-Server(Cs)主要是客户端与服务端之间的联系(就是相应的App和后......
  • 树的直径——树形dp求法
    树上任意两节点之间最长的简单路径即为树的「直径」。树形DP的做法可以在存在负权边的情况下求解出树的直径。constintN=10010,M=20010;intn,a,b,c,ans;structedge{intv,w;};vector<edge>e[N];intdfs(intx,intfa){intd1=0,d2=0;for(autoed:e[x]){......
  • csp认证202109-4——之状态压缩dp加期望(记忆化搜索
    https://www.acwing.com/problem/content/description/4012/#include<bits/stdc++.h>usingnamespacestd;#definelllonglong//#defineintlonglong#defineullunsignedlonglong#definepiipair<int,int>//#definedoublelongdouble#define......