好多好多天前写了这道题的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. 通过工厂函数封装返回app对象

    main.py #主文件 import os from app import create_app # 通过环境变量设置项目运行时使用的配置文件,这里就手动设置以下了,一般部署的时候通过脚本等设置. ...

  2. 安装华企盾DSC防泄密系统huawei Intel的电脑,加载驱动失败

    解决方法:从控制面板-[启用或关闭Windows功能]里面把[Hyper-V的功能]关闭 重启电脑再开启之后可以加密驱动则可以加载成功

  3. Java多线程学习(Day01)

    目录 线程简介 线程实现(重点) 线程状态 线程同步(重点) 线程通信问题 进程与线程概念 --来自百度百科的解释: 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资 ...

  4. Fiddler使用 抓取手机数据包及中文乱码解决方案

    https://blog.csdn.net/zyb2017/article/details/79260086

  5. 春秋云镜 - CVE-2022-30887

    多语言药房管理系统 (MPMS) 是用 PHP 和 MySQL 开发的, 该软件的主要目的是在药房和客户之间提供一套接口,客户是该软件的主要用户.该软件有助于为药房业务创建一个综合数据库,并根据到期. ...

  6. 痞子衡嵌入式:在i.MXRT1170上快速点亮一款全新LCD屏的方法与步骤(MIPI DSI接口)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是在i.MXRT1170上快速点亮一款全新LCD屏的方法与步骤. 我们知道 LCD 屏的接口有很多:DPI-RGB.MIPI DSI.DB ...

  7. JavaFx 打包jar(六)

    JavaFx 打包jar(六) JavaFX 从入门入门到入土系列 我们编写了不少javafx,那么如何打包成jar给用户呢?下面我给出比较全的打包方式. 打包jar 下面我给出比较全的打包方式. 1 ...

  8. JavaFx之Ikonli图标库大全(十五)

    JavaFx之Ikonli图标库大全(十五) Ikonli给java提供了大量的图标库, 官网:https://kordamp.org/ikonli/ Ikonli 提供了可以在 Java 应用程序中 ...

  9. ElasticSearch-1

    原文链接:https://gaoyubo.cn/blogs/52ef5bf7.html 一.Elasticsearch 架构设计 Elasticsearch 架构层: Elasticsearch 五层 ...

  10. gh-pages在线演示踩的坑

    git在线演示 1.新建一个gh-pages分支 2.打包好的dist上传到分支里 3.访问:https://[用户名].github.io/[项目名]/dist ( 会自动访问dist下的index ...