好多好多天前写了这道题的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. Fragment动态添加与管理

    activity_main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout ...

  2. AI浪潮下,大模型如何在音视频领域运用与实践?

    视频云大模型算法「方法论」. 刘国栋|演讲者 在AI技术发展如火如荼的当下,大模型的运用与实践在各行各业以千姿百态的形式展开.音视频技术在多场景.多行业的应用中,对于智能化和效果性能的体验优化有较为极 ...

  3. 开心自走棋:使用 Laf 云开发支撑数百万玩家

    先介绍一下开心自走棋 开心自走棋是一款剑与魔法的烧脑自走棋游戏.以著名的魔幻世界观为蓝本,采用了轻松可爱的画面风格,精致细腻的动画和特效来还原魔兽之战. 现在市面上自走棋游戏多是 PvP 玩法为主,而 ...

  4. rust angular 自签名证书 wss

    项目中采用 wss 来建立的前后端连接, 但是并没有用到认证的证书, 所以自己用 openssl 生成了私钥, 自签名证书来使用: 这里就不再赘述 Wss 连接过程, 直接上手操作: 1. 生成私钥, ...

  5. Flutter 中常用的缓存数据方式

    SharedPreferences: 优点:使用简单,轻量级,适用于少量数据的缓存:缺点:不适合存储大型.结构化.复杂的数据: SQLite: 优点:可以存储大量.结构化.复杂的数据,支持复杂的数据查 ...

  6. Cesium案例解析(九)——Rotatable2DMap旋转2D地图

    目录 Cesium的Rotatable 2D Map示例展示了一个旋转的二维地图: 'use strict'; var viewer = new Cesium.Viewer('cesiumContai ...

  7. 神经网络基础篇:详解logistic 损失函数(Explanation of logistic regression cost function)

    详解 logistic 损失函数 在本篇博客中,将给出一个简洁的证明来说明逻辑回归的损失函数为什么是这种形式. 回想一下,在逻辑回归中,需要预测的结果\(\hat{y}\),可以表示为\(\hat{y ...

  8. Linux神器strace的使用方法及实践

    在Linux系统中,strace命令是一个集诊断.调试.统计与一体的工具,可用来追踪调试程序,能够与其他命令搭配使用,接下来就Linux系统调用工具strace的使用方法和实践给大家做个详细介绍,一起 ...

  9. 实例解析丨一文搞定GaussDB CM服务异常

    摘要:本文主要为大家带来如何处理GaussDB CM服务异常问题. 本文分享自华为云社区<[实例状态]GaussDB CM服务异常>,作者:酷哥. 首先确认是否是虚拟机.网络故障,底层故障 ...

  10. DevUI开源经验分享:从0到1开始运营你的开源项目

    摘要:DevUI是面向企业中后台产品的开源前端解决方案,于2019年6月正式在GitHub开源,从当时的无人问津到去年8月累计1000 Star,再到现如今上千名社区成员.上百位贡献者.达成了3000 ...