好多好多天前写了这道题的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. 是谁的简历上全是秒杀商城和RPC啊?

    是不是还在苦于自己简历上的项目离不开商城.RPC.秒杀.论坛.外卖.点评等等烂大街的项目?是不是翻遍全网再很难找到一个既有含金量又能看得懂的项目?那么现在就不用找了,下面这个项目一定适合你! 高性能短 ...

  2. 1.7每日总结-vue链mysql4

    新建/server/router.js,用于配置对应路由let express = require('express')let router = express.Router()let user = ...

  3. Baidu Comate实践指南,惊艳了我...

    1 啥是Baidu Comate Comate是百度开发的编程大模型工具,它基于文心大模型,结合百度积累多年的编程现场大数据和外部优秀开源数据,为我们生成更符合实际研发场景的优质代码:它能提升编码效率 ...

  4. 下载安装Android Studio

    1,安装java的jdk 2,下载安装Dart 3,下载安装  Android Studio 建议这个安装在C盘,以防后期出现各种问题 在plugins中 (1)下载dart插件 (2)下载flutt ...

  5. Windows下编译并使用64位GMP

    目录 1. 概述 2. 编译 2.1. GCC环境 2.2. 编译过程 3. 使用 3.1. 调用 3.2. 示例 4. 参考 1. 概述 GMP是一个开源的数学运算库,它可以用于任意精度的数学运算, ...

  6. 微服务架构下,DLI的部署和运维有何奥秘?

    摘要:探讨DLI两个问题:如何在生产环境中部署与运维实现快速迭代上线,如何实现监控告警来提升整体运维能力. 华为云数据湖探索DLI是支持多模引擎的Serverless大数据计算服务,其很好的实现了Se ...

  7. 云小课|RDS for MySQL参数模板一键导入导出,参数配置轻松搞定

    摘要:云数据库RDS for MySQL支持参数模板的导入和导出功能. 本文分享自华为云社区<[云小课][第56课]RDS for MySQL参数模板一键导入导出,参数配置轻松搞定>,作者 ...

  8. LiteOS内核源码分析:位操作模块

    摘要:本文带领大家一起剖析了LiteOS位操作模块的源代码,代码非常简单,参考官方示例程序代码,实际编译运行一下,加深理解. 在进一步分析之前,本文我们先来熟悉下LiteOS提供的辅助功能模块–位操作 ...

  9. 云小课 | 一分钟了解AppCube中的应用

    阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说).深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云.更多精彩内容请单击此处. 摘要:应用魔方(AppC ...

  10. “互联网+”大赛之AI创新应用赛题攻略:大胆脑洞,共绘智慧生活蓝图

    摘要:本次"互联网+"大赛AI创新应用赛题的设置是希望学生可以从日常实际应用需求出发,结合自己的奇思妙想,提升智能终端用户的使用体验,为构建万物互联的智能世界贡献一份力量. 本文分 ...