好多好多天前写了这道题的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;
}

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

  1. 「疫期集训day4」硝烟

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

  2. 【洛谷】P1064 金明的预算方案(dp)

    题目描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过N元钱就行”.今 ...

  3. 洛谷 P1064 金明的预算方案【DP/01背包-方案数】

    题目背景 uim神犇拿到了uoi的ra(镭牌)后,立刻拉着基友小A到了一家--餐馆,很低端的那种. uim指着墙上的价目表(太低级了没有菜单),说:"随便点". 题目描述 不过ui ...

  4. 【dp】P1064 金明的预算方案

    题目描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过NN元钱就行”. ...

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

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

  6. hdu4939 Stupid Tower Defense (DP)

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

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

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

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

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

  9. 周赛C题 LightOJ 1047 (DP)

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

  10. lightOJ 1047 Neighbor House (DP)

    lightOJ 1047   Neighbor House (DP) 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=87730# ...

随机推荐

  1. Grafana系列-Loki-基于日志实现告警

    系列文章 Loki 系列文章 前言 实际应用中除了基于 Metrics 告警, 往往还有基于日志的告警需求, 可以作为基于 Metrics 告警之外的一个补充. 典型如基于 NGINX 日志的错误率告 ...

  2. [THUPC 2023 初赛] 快速 LCM 变换

    题目描述 小 I 今天学习了快速最小公倍数变换(Fast Least-Common-Multiple Transform, FLT),于是他想考考你. 给定一个长度为 \(n\) 的正整数序列 \(r ...

  3. MybatisPlus自定义枚举映射

    1.问题的由来 在平时开发中多多少少肯定会遇到一些例如status...等特殊含义的字段值,虽然传递10:ADMIN,20:NORMAL可以解决业务需求,但是不是很直观 2.使用MP自定义枚举解决 U ...

  4. 【Python微信机器人】第六篇:优化使用方式,可pip安装

    优化内容 这篇不聊技术点,说一下优化后的Python机器人代码怎么使用,优化内容如下: 将hook库独立成一个库,发布到pypi,可使用pip安装 将微信相关的代码发布成另一个库,也可以pip安装 g ...

  5. 【笔记整理】xpath复习

    又是xpath.... 10年前学java就学过了...哈哈哈 要就看w3cschool的教程就行了, 函数部分会用得到: https://www.w3school.com.cn/xpath/xpat ...

  6. 递归产生StackOverflowError

    package com.guoba.digui; public class Demo01 { public void A(){ A();//自己调用自己,递归没用好,产生错误java.lang.Sta ...

  7. 单位换算详解:bit、Byte、bps、Bps、pps、Gbps的单位详细说明及换算

    当谈论计算机存储和数据传输时,"bit"(比特)和"Byte"(字节)是两个常见的术语,它们具有不同的含义和用途. 位(bit):"位"来自 ...

  8. OpenCV计算机视觉学习(15)——浅谈图像处理的饱和运算和取模运算

    如果需要其他图像处理的文章及代码,请移步小编的GitHub地址 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/ComputerVisionPractic ...

  9. 1、reids 基础

    SortedSet类型 特性 1.可排序 2.元素不重复性 3.查询速度快 与普通的集合类型相比,SortedSet 主要有以下两个特点: 有序性:根据分数对元素进行排序,便于范围查找等操作. 不重复 ...

  10. 完美解决Python词云库wordcloud不显示中文问题

    你的Python词云库wordcloud显示的都是方框吗?别担心,我有一个妙招让你的中文词云变得美观又清晰! 背景: wordcloud是一个基于python的词云生成库,它可以让你用简单的代码创建出 ...