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

P1064-DP【绿】

时间:2023-11-17 16:03:11浏览次数:35  
标签:lc DFS mon rc P1064 spe DP

好多好多天前写了这道题的50分代码,然后不知道错在哪里反复调没调对。然后这周我极度忙,忙死了,好不容易有一点时间再来审视这道题了,然后我5分钟想明白了一切...
把DP数组定义的那句int DP[100][5000]改成int DP[100][50000]就直接AC了...此前的50代码错的5个点都是WA而不是RE,说明编译器并没有就访问越界而报错,我便下意识的认为数组够用,因此完全没想这回事。
但是,我的DP数组是二维数组,这意味着什么呢?
要知道,二维数组其实是骗小孩玩的,现实是计算机内只有一维数组,二维数组只是伪装成仿佛二维的下标形式,实际上都是下标转换后的一维数组,比如对于a[10][100]来说,a[1][1]实际上指的是*(a+101),而越界的标志是*(a+n)中的n>=10*100
明白了吧!
这意味着如果我访问a[1][200]这种逻辑上越界了的数组变量,由于计算机没有二维数组,采用了一种骗人的方式实现二维数组,而这种处理方式会认为这种逻辑上越界的东西实际上并没有越界。
因此当数据大但没那么大的时候,就会出现越界了但是不RE却WA的情况(该说是因为数据不够强还是因为数据太强了呢,是还是不是,这是个哲学问题(笑))。因此以后要提高警惕,哪怕是WA,也不代表数组没越界,不能因为没RE就不考虑这事,同时数组大小严格用科学计数法来写,不要自己转换成数字,容易落下某个0!
当我一瞬间意识到以上那几段话的时候,我加了那个0,然后提交了代码,在等待评测结果的那2秒钟内我甚至希望自己依旧WA,因为自己AC了就说明此前困扰自己好几天的那个问题竟是因为一个如此弱智的马虎,显得自己好呆啊。结果很不幸,自己AC了(瞧瞧,这是什么话)
我好呆啊...哎...
总之,算了,毕竟AC了一道绿题...还不错吧...

Code

#include <iostream>
#include <cstring>
#include <string>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <stack>
#include <queue>
#include <map>
#include <unordered_map>
#include <cmath>
using namespace std;
#define int long long
int DP[100][50000],lc[5000],rc[5000],v[5000],w[5000],q[5000],P,n,m,np=1;
int dfs(int spe,int mon)
{
	if(DP[spe][mon]!=-1)return DP[spe][mon];
	if(q[spe]!=0)return DP[spe][mon]=dfs(spe-1,mon);
	if(mon==0)return DP[spe][mon]=0;
	if(spe==0)
	{
		return DP[spe][mon]=0;
	}
	int DFS=0;
	DFS=max(DFS,dfs(spe-1,mon));
	if(mon-v[spe]>=0) 
		DFS=max(DFS,dfs(spe-1,mon-v[spe])+w[spe]*v[spe]);
	if(lc[spe]!=-1)
	{
		if(mon-v[spe]-v[lc[spe]]>=0)
			DFS=max(DFS,dfs(spe-1,mon-v[spe]-v[lc[spe]])+w[spe]*v[spe]+w[lc[spe]]*v[lc[spe]]);
		if(rc[spe]!=-1)
		{
			if(mon-v[spe]-v[rc[spe]]>=0)
				DFS=max(DFS,dfs(spe-1,mon-v[spe]-v[rc[spe]])+w[spe]*v[spe]+w[rc[spe]]*v[rc[spe]]);
			if(mon-v[spe]-v[lc[spe]]-v[rc[spe]]>=0)
				DFS=max(DFS,dfs(spe-1,mon-v[spe]-v[lc[spe]]-v[rc[spe]])+w[spe]*v[spe]+w[rc[spe]]*v[rc[spe]]+w[lc[spe]]*v[lc[spe]]);
		}
	}
	return DP[spe][mon]=DFS;
}
signed main()
{
	cin>>n>>m;
	memset(lc,-1,sizeof(lc));
	memset(rc,-1,sizeof(rc));
	memset(DP,-1,sizeof(DP));
	for(int i=1;i<=m;i++)
	{
		cin>>v[i]>>w[i]>>q[i];
		if(q[i]!=0)
		{
			if(lc[q[i]]==-1)lc[q[i]]=i;
			else rc[q[i]]=i;
		}
	}
	cout<<dfs(m,n)<<endl;
	return 0;
}

标签:lc,DFS,mon,rc,P1064,spe,DP
From: https://www.cnblogs.com/gongkai/p/17838946.html

相关文章

  • C#实现抓包,并过滤UDP
    C#实现抓包,并过滤UDPusingPacketDotNet;usingSharpPcap;usingSharpPcap.LibPcap;usingSystem;usingSystem.Linq;usingSystem.Net.Sockets;usingSystem.Text;namespaceConsoleAppSharppcap{internalclassProgram{staticvoidMain(string[]a......
  • 500mA 线性锂电充电芯片 DP4054/DP4054H完全兼容替代TP4054
    锂电池工作原理锂电池是一种新型的可充电电池,其具有体积小、重量轻、容量大耐用性强等特点,因此被广泛应用于手机、笔记本电脑、移动电源等电了设备上。充电原理是指电池在充电过程中,用电流将锂离子从外部电源输入电池,使其形成一个电荷差,实现充电。锂电池充电原理是采用化学反......
  • Hibench对大数据平台CDH/HDP基准性能测试
    一、部署方式1.1、源码/包:https://github.com/Intel-bigdata/HiBench部署方法:https://github.com/Intel-bigdata/HiBench/blob/master/docs/build-hibench.md注意:hibench执行需hadoop客户端jar包环境如何使用HiBench进行基准测试说明:https://cloud.tencent.com/developer/ar......
  • AT_tdpc_tree 木
    题目描述:给定一棵大小为\(n\)的树,用另外\(n\)个点加边构造出这棵树,要求构造时所被边连到的点联通,求有多少连边顺序。数据范围:\(1\leqn\leq1000\)。思路:首先我们发现,因为题目要求连边后一定是一个连通块,所以考虑以哪一个点作为起点,然后向下连边。所以我们得到一个初......
  • 数位dp—卡尔文锦标赛
    [CEOI2015Day1]卡尔文球锦标赛题目描述译自CEOI2015Day1T2「Calvinballchampionship」一场卡尔文球比赛会有$n$名选手参与,他们的编号分别为$1\dotsn$,分为若干个非空的球队。我们规定球队之间按照每个球队编号最小的选手的编号排序,并且以从1开始的连续整数编号。举......
  • 2.6 Windows驱动开发:使用IO与DPC定时器
    本章将继续探索驱动开发中的基础部分,定时器在内核中同样很常用,在内核中定时器可以使用两种,即IO定时器,以及DPC定时器,一般来说IO定时器是DDK中提供的一种,该定时器可以为间隔为N秒做定时,但如果要实现毫秒级别间隔,微秒级别间隔,就需要用到DPC定时器,如果是秒级定时其两者基本上无任何差......
  • DPDK-Pktgen Ubuntu 安装与使用
    原文链接:DPDK-PktgenUbuntu安装与使用系统及DPDK版本:系统:Ubuntu2204DPDK:21.11.1Pktgen-DPDK:22.04.1关于DPDK,其实Ubuntu的软件源中就已经包含了最新的Stable版本的DPDK,如果不想自己编译的话,直接 aptinstalldpdk 也是可以的(甚至更方便)。安装编译依赖:sudoaptinsta......
  • mysql5.7安装插件udp(lib_mysqludf_sys)
    项目应用中需要用mysql执行一下命令行.几经搜索可以安装lib_mysqludf_sys插件可以实现本地window环境安装(mysql8.0,64位,使用lib_mysqludf_sys.dll文件)--查看环境中插件目录showvariableslike'%plugin%';--plugin_dir C:/mysql/lib/plugin/--将lib_mysqludf_sys......
  • 从DPlayer说起,有哪些开源的H5播放器
    引言​ H5指的是HTML5,也就是介绍网页播放器(只是列出而已)。首先我不是什么大佬,并没有完全体验过以下我会介绍的全部播放器;其次,因为我水平比较低,主要介绍拥有中文文档的播放器,不了解开发的朋友当成科普看看就行,平常用不到,了解的可以补充一下还有哪些,毕竟我收集的肯定不全,最好能补......
  • WordPress主题 JustNews主题6.0.1(亲测首页不空白)
    介绍资源入口需要用WordPress5.X版本JustNews介绍:一款专为博客、自媒体、资讯类的网站设计开发的WordPress主题,自v3.0版开始支持自主研发的前端用户中心,不仅支持注册、登录、账户设置、个人中心等常用页面的添加,还可以上传头像、设置用户分组等等!更新介绍JustNews主题更新......