首页 > 其他分享 >P1216-DP【橙】

P1216-DP【橙】

时间:2023-11-02 09:22:24浏览次数:31  
标签:暴论 int dfs P1216 1005 include DP

在这道题中,我第一次用了memset,确实方便,不过需要注意的是只有全部赋值-1和0的时候才能使用它,否则他能干出吓死人的事。以及memset在cstring头文件里,在本地就算不include也能照常编译,但评测机里可能不行,所以一定要写上cstring
同时,我半获得半自我总结了一个暴论,这个暴论直接让我理解DP到底是个啥了。
暴论如下:
暴论,除了存参数返回值对应关系的的DP数组外不准更改外部变量(不准更改意味着可以把变量当常量引用)的dfs就是动态规划!反之亦然!换句话说,记忆化搜索是一种特殊的dfs,不只是加了记忆化,还要求改dfs不能修改在dfs外部定义的全局变量,因为只有这样的dfs才能记忆化。而这种记忆化搜索其实就是DP,完全等价!!!至于递推形式的DP才是引申出来的DP新写法,想学习DP完全可以从学习新形式的dfs来入手逐渐掌握DP是想干啥。

Code

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string>
#include <map>
#include <cstring>
#include <vector>
#include <queue>
#include <cmath>
using namespace std;
int N;
int DP[1005][1005],a[1005][1005];
//暴论,除了存参数返回值对应关系的的DP数组外不准更改外部变量(不准更改意味着可以把变量当常量引用)的dfs就是动态规划!倘若真的如此哪便能彻底明白动态规划了!!!
int dfs(int x,int y)
{
	if(DP[x][y]!=-1)return DP[x][y];
	if(x==N)return DP[x][y]=a[x][y];
	else
	{
		return DP[x][y]=a[x][y]+max(dfs(x+1,y),dfs(x+1,y+1));
	}
}

int main()
{
	cin>>N;
	memset(DP,-1,sizeof(DP));
	for(int i=1;i<=N;i++)
	{
		for(int j=1;j<=i;j++)
		{
			cin>>a[i][j];
		}
	}
	cout<<dfs(1,1)<<endl;
    return 0;
}

标签:暴论,int,dfs,P1216,1005,include,DP
From: https://www.cnblogs.com/gongkai/p/17804661.html

相关文章

  • 验证2个节点udp和tcp可通性
    -u表示udp,默认是tcp。-l表示作为server监听。server:192.168.0.104上开启udp123端口server发送11client:连接192.168.0.104上udp123端口client发送100 server:192.168.0.104上开启tcp123端口server发送102client:连接192.168.0.104上tcp123端口client发送101......
  • ThreadPoolExecutor使用浅谈
    1.基础介绍ThreadPoolExecutor是Python标准库concurrent.futures模块中的一个类,用于实现线程池的功能。ThreadPoolExecutor模块相比于threading等模块,通过submit方法返回的是一个Future对象,它代表了一个未来可期的结果。通过Future对象,我们可以在主线程(或主进程)中获取某个线程(......
  • DP查缺补漏之多重背包优化原理
    DP查缺补漏之多重背包优化原理普通思路类似完全背包for(inti=1;i<=n;i++)for(intj=1;j<=V;j++)for(intk=1;k<=V/c[i];k++){if(k*c[i]<=j)f[i][j]=max(f[i-1][j],f[i-1][j-k*c[i]]+k*w[i]);......
  • poj 2411 状压dp入门题
    Mondriaan'sDreamTimeLimit:3000MS MemoryLimit:65536KTotalSubmissions:29096 Accepted:15505DescriptionSquaresandrectanglesfascinatedthefamousDutchpainterPietMondriaan.Onenight,afterproducingthedrawingsinhis�......
  • UDP 协议
    UDP协议UDP(UserDatagramProtocol),目标是在传输层提供直接发送报文(Datagram)的能力。Datagram是数据传输的最小单位。UDP协议不会帮助拆分数据,它的目标只有一个,就是发送报文。   与tcp差异  ......
  • CF练习题17(DP)
    ChocolateBar我们看到\(n,m\le30\)想到暴搜。考虑枚举分割线,一直到刚好满足需要或者只有一个巧克力的情况。随手跑了个最优解。inlineintdfs(intn,intm,intk){ if(n*m==k)return0; if(k<=0)return0; if(f[n][m][k]<inf)returnf[n][m][k]; intres=inf; up(i,......
  • DP查缺补漏之01背包优化原理
    DP查缺补漏之01背包优化原理先复习一下基本知识状态假设DP[I][J]为前\(i\)个物品,容量小于\(j\)时的最优解(最大价值)状态转移DP[I][J]=max(DP[I-1][J],DP[I-1][J-V[I]]+W[I])对于第\(i\)个物品,两种可能装入背包则状态应通过前\(i-1\)个物品,容量小于\(j......
  • PoW、PoS、DPoS和PBFT简介
    1.概览PoW(工作量证明)、PoS(权益证明)、DPoS(委托权益证明)和PBFT(拜占庭容错)是区块链和分布式系统领域中常见的共识算法。下面将详细介绍这些共识算法的原理和特点:PoW(工作量证明):原理:PoW是比特币等区块链网络使用的共识算法。在PoW中,矿工通过解决一个数学难题(哈希碰撞)来创建新的区......
  • 05. UDP编程
    一、什么是UDP协议  相对于TCP协议,UDP协议则是面向无连接的协议。使用UDP协议时,不需要建立连接,只需要知道对象的IP地址和端口号,就可以直接发数据包。但是,数据无法保证一定到达。虽然用UDP传输数据不可靠,但它的优点是比TCP协议的速度快。对于不要求可靠到达的数据而......
  • 重新使用android studio编写udp socket程序,备忘记录
    1,建立socket需要使用子线程而不是主线程。2,java/android使用数据报格式。3,可以利用python作为socket的客户/服务器端,非常简单。但python可以不使用数据报,而直接使用字符串。当然也可以使用数据报。当与android配合时使用数据报格式4,一般地,传输的是字符串,因此,数字要编码为字符串......