(em…有几个学弟最近问了这题,这里写一下题解吧,另外吐槽一下,我博客里写的很多dp标的都是简单dp,这里不是我觉得这些dpj简单,只是我最初学dp的时候大部分除了背包,数位dp等比较特殊的dp外都记成简单dp了,这里的简单是basic,不是easy)
题解:dp(i,j)表示已经闯到了第i关,且当前已经消耗的体力为j时的最大价值。

那么显然由题意根据上一步是从消耗a体力还是从消耗b体力转移过来的进行集合划分,即:

1.若从a转移,则dp(i,j)=dp(i-1,j-a)+b;
2.若从b转移,则dp(i,j)=dp(i-1,j-c)+d;
3.若此时结束,则当前答案就是dp(i,j);
另外注意:
1.这里不能写成dp(i,j)=max(dp(i,j),dp(i-1,j-a)+b)之类的,因为这样代表我可以不选当前状态,但是这题是一路闯关过来的,不允许之前有不选的这种情况。
2.为了保证是一路闯关,我们所有的状态必须是从一个合法状态转移过来的,所以要把所有的非法状态初始化为-1

其实这里状态转移到这里就没了,我们枚举一下i和j然后扫一遍上面状态转移就行了。但是比赛的时候我这样第一次交发现爆空间了,注意到这里都是每一个i位置的状态都是从上一个i-1位置的状态转移过来的,这样的情况我们都可以采用滚动数组做空间优化(第一维全部&1就行了),这样dp[N][N]就可以写成dp[2][N]了。
(关于滚动数组的原理这里就不细说了,其他博客有更详细的解释)。
AC代码:

#include <bits/stdc++.h>
using namespace std;
const int N=6010;
int n,m;
int a[N],b[N],c[N],d[N];
int dp[2][N];void solve(){scanf("%d%d",&n,&m);for(int i=1;i<=n;i++) scanf("%d%d%d%d",&a[i],&b[i],&c[i],&d[i]);for(int j=0;j<=m;j++)dp[0][j]=dp[1][j]=-1;dp[0][0]=0;int res=0;for(int i=1;i<=n;i++){for(int j=0;j<=m;j++){int k=-1;if(j>=a[i]&&dp[i-1&1][j-a[i]]>=0) k=dp[i-1&1][j-a[i]]+b[i];if(j>=c[i]&&dp[i-1&1][j-c[i]]>=0) k=max(k,dp[i-1&1][j-c[i]]+d[i]);dp[i&1][j]=k;res=max(res,dp[i&1][j]);}    }printf("%d\n",res);
}main(){int T;scanf("%d",&T);while(T--)solve();
}

2021CCPC河南省赛 E:闯关游戏(简单DP)相关推荐

  1. 【2021ccpc河南省赛】闯关游戏

    闯关游戏 题目链接 题目描述 小i正在玩一个闯关游戏,游戏一共n关. 初始的时候小i有H点体力以及0个金币. 小i只能按从第1关到第n关按顺序完成.在第i关时,小i要在三种操作中选择一种: 1.当前体 ...

  2. 【2021年CCPC河南省赛】闯关游戏

    题目: 小i正在玩一个闯关游戏,游戏一共n关. 初始的时候小i有H点体力以及0个金币. 小i只能按从第1关到第n关按顺序完成.在第i关时,小i要在三种操作中选择一种: 1.当前体力不小于Ai 可以选择 ...

  3. 2829: 闯关游戏【DP】

    时间限制: 1 Sec 内存限制: 64 MB 题目描述 小i正在玩一个闯关游戏,游戏一共n关. 初始的时候小i有H点体力以及0个金币. 小i只能按从第1关到第n关按顺序完成.在第i关时,小i要在三种 ...

  4. 网页闯关游戏(riddle webgame)--仿微信聊天的前端页面设计和难点

    前言: 之前编写了一个网页闯关游戏(类似Riddle Game), 除了希望大家能够体验一下我的游戏外. 也愿意分享编写这个网页游戏过程中, 学到的一些知识. 本文讲描述, 如何在网页端实现一个仿微信 ...

  5. 横板闯关游戏中的角色移动

    前言 在很多2D游戏中,都会涉及到角色移动,跳跃等操作,最典型的就是横板闯关游戏.例如经典的魂斗罗.三国战纪等.这两款游戏在地图移动和角色行走的方式中唯一的不同就是魂斗罗是没有纵深的那种. 看似简单, ...

  6. 程序猿光棍节闯关游戏

    好无聊好寂寞,来玩一下.... 因为我不是程序猿,所以应该闯不到头的.... 边闯边写就是了 第一关链接请戳 http://segmentfault.com/game/ 第一关查看源代码即可 于是得到 ...

  7. Android 端 2D 横屏动作冒险类闯关游戏【100010436】

    Android 端 2D 横屏动作冒险类闯关游戏 摘要 随着闯关类游戏的玩法与数目的不断增加,本文所设计的一款名为<Wander In Color>的动作冒险闯关类游戏,将从一个新的角度入 ...

  8. 《基于Unity的2D多人乱斗闯关游戏设计与开发》--小组博客综述

    文章目录 项目名称 项目背景 项目简介 项目架构 项目特色 大致功能需求 游戏模式/内容 项目技术选型 项目分工 项目具体计划 此次项目实训不完全按照项目计划书进行,因为游戏范围太广,可能随时调整游戏 ...

  9. 导图解文 从梦想到财富(32)说服,是个闯关游戏

    系列文章说明: 本系列文章 主要是 使用 思维导图 对知乎 上一个知乎上的专题系列文章<从梦想到财富>的 一个解读. 1 文章链接 本章节 对应 <从梦想到财富>专栏的 文章链 ...

最新文章

  1. # Writing your-first Django-app-part 4-simple-form
  2. Androidstudio SVN安装与使用
  3. python语言的类型是_Python到底是强类型语言,还是弱类型语言?
  4. word 中同样的字号和行距倍数,不一样的行距
  5. 阿里研究院副院长:数字化是否可以买来?
  6. 反应堆模式(reactor)
  7. springBoot shiro
  8. JQuery根据关键字检索html元素并筛选显示
  9. python pip 下载
  10. 均匀分布 卡方分布_高等数理统计—第一章 统计分布基础
  11. 强大的Android参数模拟器,自由修改手机型号、SDK版本号等信息
  12. Simulink 搭建模型【MATLAB官网帮助】
  13. 服装网站建设策划书-服装网站建设目的需求分析策划书
  14. 丹佛机场行李系统案例分析
  15. geforce rtx3090显卡安装cuda11.0
  16. banner设圆角_如何规范运营Banner设计?
  17. Apache DolphinScheduler 海豚调度器自定义时间参数
  18. 网络红人斌少最新资料
  19. 张正友标定法实战-标定森云GMSL相机
  20. 黑莓招聘 BlackBerry Developer Evangelist (based in China)

热门文章

  1. 基于Scrapy爬取伯乐在线网站
  2. c++飞机大战+备注(代码免费复制)
  3. javascript 时间倒计时和正向计时
  4. exe4j打包问题解决方案
  5. OpenCV学习笔记(7)图像的通道(channels)问题
  6. 爬虫逆向之字体反爬(二)、镀金的天空-字体反爬-2
  7. short—溢出问题
  8. [宇宙与天文]灵魂星体投射
  9. python行业发展前景_python行业发展前景
  10. webstorm2018.3 汉化包下载