题目传送门

Mortal Kombat Tower

题目大意

你和你朋友打游戏,给你一个长度为n的数组代表boss,数组中包含0和1,你朋友先手
你可以打败任意boss而不消耗值,你朋友在打败1的boss时需要消耗1,每次可以选择打败1~2个boss
求最小的通关花费

思路

开两个一维数组,分别为你朋友杀了第i个怪物需要的最小花费,你杀了第i个怪物的最小花费,可得
dp1[i]=min(dp2[i−1],dp2[i−2])dp1[i]=min(dp2[i-1],dp2[i-2])dp1[i]=min(dp2[i−1],dp2[i−2])
dp2[i]=min(dp1[i−1]+a[i],dp1[i−2]+a[i]+a[i−1])dp2[i]=min(dp1[i-1]+a[i],dp1[i-2]+a[i]+a[i-1])dp2[i]=min(dp1[i−1]+a[i],dp1[i−2]+a[i]+a[i−1])
将dp1代入dp2中,可得
dp[i]=min(min(dp[i−2],dp[i−3])+a[i],min(dp[i−3],dp[i−4])+a[i]+a[i−1])dp[i]=min(min(dp[i-2],dp[i-3])+a[i],min(dp[i-3],dp[i-4])+a[i]+a[i-1])dp[i]=min(min(dp[i−2],dp[i−3])+a[i],min(dp[i−3],dp[i−4])+a[i]+a[i−1])
初始化时为:
dp[1]=a[1],dp[2]=a[1]+a[2],dp[1]=a[1],\ dp[2]=a[1]+a[2],dp[1]=a[1], dp[2]=a[1]+a[2],
dp[3]=dp[1]+a[3],dp[4]=min(min(dp[2],dp[1])+a[4],dp[1]+a[3]+a[4])dp[3]=dp[1]+a[3],\ dp[4]=min(min(dp[2],dp[1])+a[4], dp[1]+a[3]+a[4])dp[3]=dp[1]+a[3], dp[4]=min(min(dp[2],dp[1])+a[4],dp[1]+a[3]+a[4])
最后通过时需要从dp[n],dp[n−1],dp[n−2]dp[n],dp[n-1],dp[n-2]dp[n],dp[n−1],dp[n−2]中取最小值,因为可能是我杀一个或者两个,可能是朋友杀的

AC Code

#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cstring>
using namespace std;
#define endl '\n'
#define INF 0x3f3f3f3f
#define int long long
#define debug(a) cout<<#a<<"="<<a<<endl;
// #define TDS_ACM_LOCAL
const int N=2e5 +9;
int n, a[N];
int dp[N];
void solve(){cin>>n;for(int i=1; i<=n; i++) cin>>a[i];if(n==1 || n==2)    {cout<<a[1]<<endl; return ;}dp[1]=a[1], dp[2]=a[1]+a[2];dp[3]=dp[1]+a[3], dp[4]=min(min(dp[2],dp[1])+a[4], dp[1]+a[3]+a[4]);for(int i=5; i<=n; i++)dp[i]=min( min(dp[i-2], dp[i-3]) +a[i], min(dp[i-3], dp[i-4]) +a[i] +a[i-1]);cout<<min(min(dp[n], dp[n-1]), dp[n-2])<<endl;return ;
}signed main(){ios::sync_with_stdio(0);cin.tie(0), cout.tie(0);
#ifdef TDS_ACM_LOCALfreopen("D:\\VS code\\.vscode\\testall\\in.txt", "r", stdin);freopen("D:\\VS code\\.vscode\\testall\\out.txt", "w", stdout);
#endifint T;cin>>T;while(T--)  solve();return 0;
}

C. Mortal Kombat Tower(DP)相关推荐

  1. 求三角形最大面积(DP)

    求三角形最大面积(DP) 在OJ上奇迹般WA了:WA:70. Why? #include <iostream> #include <string.h> using namesp ...

  2. LeetCode 编辑距离 II(DP)

    1. 题目 给你两个单词 s 和 t,请你计算出将 s 转换成 t 所使用的最少操作数. 你可以对一个单词进行如下两种操作: 删除一个字符 替换一个字符 注意: 不允许插入操作 题目保证有解 示例: ...

  3. LeetCode 1220. 统计元音字母序列的数目(DP)

    文章目录 1. 题目 2. 解题 1. 题目 给你一个整数 n,请你帮忙统计一下我们可以按下述规则形成多少个长度为 n 的字符串: - 字符串中的每个字符都应当是小写元音字母('a', 'e', 'i ...

  4. LeetCode 265. 粉刷房子 II(DP)

    文章目录 1. 题目 2. 解题 1. 题目 假如有一排房子,共 n 个,每个房子可以被粉刷成 k 种颜色中的一种,你需要粉刷所有的房子并且使其相邻的两个房子颜色不能相同. 当然,因为市场上不同颜色油 ...

  5. LeetCode 256. 粉刷房子(DP)

    文章目录 1. 题目 2. 解题 1. 题目 假如有一排房子,共 n 个,每个房子可以被粉刷成红色.蓝色或者绿色这三种颜色中的一种,你需要粉刷所有的房子并且使其与相邻的两个房子颜色不能相同. 当然,因 ...

  6. LeetCode 1223. 掷骰子模拟(DP)

    1. 题目 有一个骰子模拟器会每次投掷的时候生成一个 1 到 6 的随机数. 不过我们在使用它时有个约束,就是使得投掷骰子时,连续 掷出数字 i 的次数不能超过 rollMax[i](i 从 1 开始 ...

  7. LeetCode 1155. 掷骰子的N种方法(DP)

    1. 题目 这里有 d 个一样的骰子,每个骰子上都有 f 个面,分别标号为 1, 2, -, f. 我们约定:掷骰子的得到总点数为各骰子面朝上的数字的总和. 如果需要掷出的总点数为 target,请你 ...

  8. LeetCode 1139. 最大的以 1 为边界的正方形(DP)

    1. 题目 给你一个由若干 0 和 1 组成的二维网格 grid,请你找出边界全部由 1 组成的最大 正方形 子网格,并返回该子网格中的元素数量.如果不存在,则返回 0. 示例 1: 输入:grid ...

  9. 程序员面试金典 - 面试题 17.23. 最大黑方阵(DP)

    1. 题目 给定一个方阵,其中每个单元(像素)非黑即白. 设计一个算法,找出 4 条边皆为黑色像素的最大子方阵. 返回一个数组 [r, c, size] ,其中 r, c 分别代表子方阵左上角的行号和 ...

  10. LeetCode 1406. 石子游戏 III(DP)

    1. 题目 Alice 和 Bob 用几堆石子在做游戏.几堆石子排成一行,每堆石子都对应一个得分,由数组 stoneValue 给出. Alice 和 Bob 轮流取石子,Alice 总是先开始.在每 ...

最新文章

  1. 辛星和您一起手写CSS气泡
  2. 华为手机获取状态栏高度是错误的_华为后置指纹这么多功能,你不会还以为只能解锁和支付吧...
  3. Linux实战案例(4)CentOS清除用户登录记录和命令历史方法
  4. 字符串的相关方法 2101 0310
  5. c++禁止进程被结束_第四章 进程管理
  6. Python day 3 (3) 判断与循环
  7. 桌面支持--teamviwer如果没装杀毒软件,会有警告
  8. linux分布式文件部署,Linux的企业-分布式文件系统mfs(moosefs)搭建与配置
  9. html ajax get post,jQuery – AJAX get() 和 post() 方法 - jQuery 教程 - 自强学堂
  10. C#Winform使用火狐firefox内核GeckoWebBrowser
  11. Python 网络爬虫与数据采集(一)
  12. Java 库 Failsafe 2.0 发布,支持组合弹性策略
  13. nginx上传文件大小限制
  14. Android系统定位获取经纬度
  15. 《生物化学与分子生物学》----糖酵解,柠檬酸---听课笔记(十五)
  16. 【MAYA】模型生长
  17. Mathematica 训练课(3)- 简单图形绘制
  18. 网络天才网页中文版_【在线猜谜类网页游戏】网络天才网页版在线玩
  19. RVDS-RealView Development Suite 4 0 Professional软件
  20. DirectShow SDK笔记【关于DirectShow(2)】

热门文章

  1. C语言实现简单电子通讯录
  2. 机器视觉1:图像预处理与瑕疵检测
  3. Git报错--Everything up-to-date branch ‘main‘ set up to track ‘origin/main‘.
  4. 密码学-->buuctf49~60
  5. 网页或大屏展示的倒计时器
  6. (转)清华博士王垠的退学申请——研究生,无论你想不想搞研究,都该读读这篇文章。
  7. 新浪OAuth客户端登陆另辟蹊径
  8. MADRL(多智能体深度强化学习)
  9. Win10,Win11家庭版开启远程桌面接入功能-有详细操作截屏
  10. 2017吉首大学新生赛周老师的区间问题