Misunderstood-Missing-逆向DP
Misunderstood … Missing
记忆深刻......打铁没做出来的题
题意 :
打怪,有 A 的攻击力,有 D 的成长,初始均为 0,有 n 轮。
同时有三个数组 a[1:n],b[1:n],c[1:n]
对于每一轮:
首先,攻击力永久性成长 A=A+D;然后,在下面三个选择中选择一种行为:
①、发起进攻,产生 A+ai的伤害。
②、增加成长 D=D+bi。
③、永久性增加攻击力 A=A+ci。问产生最大总伤害为多少
思路:
逆向DP,DP [ i ]代表的是从第i天到第n天产生的最大伤害,转移方程分析一下:
如果 这一天选择 ① 那么 对后面的影响是伤害增加 ai,选择②对后面影响的是攻击的那些天数伤害都增加 ( bi * (j-i))
选择③对后面的影响是,增加伤害为攻击的天数 * c[ i ],那么dp 需要增加两个变量 ,一个是方便计算选择②的情况
增加一个攻击了的天数下标和,另一个是 当前攻击的天数数目和,初始值为 dp[ n ] [ 1 ] [ n ] = a [ n ] 详见代码:
#include<bits/stdc++.h>
using namespace std;
#define maxn 111
#define ll long long
ll t,n,a[maxn],b[maxn],c[maxn];
ll dp[3][maxn][maxn*maxn/2],ans;
int main()
{scanf("%lld",&t);while(t--){ans=0;memset(dp,0,sizeof(dp));scanf("%lld",&n);for(int i=1; i<=n; i++)scanf("%lld%lld%lld",&a[i],&b[i],&c[i]);dp[n&1][1][n]=a[n];for(int i=n-1; i>=1; i--){for(int j=1; j+i<=n; j++){int low = (i+i+j)*(j-1)/2+n;int up = (n+n-(j-1))*j/2;for(int k=low; k<=up; k++){dp[i&1][j+1][k+i]=max(dp[i&1][j+1][k+i],dp[(i+1)&1][j][k]+a[i]);dp[i&1][j][k]=max(dp[i&1][j][k],dp[(i+1)&1][j][k]+(k-j*i)*b[i]);dp[i&1][j][k]=max(dp[i&1][j][k],dp[(i+1)&1][j][k]+j*c[i]);}}}for(int j=1; j<=n; j++)for(int k=n; k<=5050; k++)ans=max(ans,dp[1][j][k]);printf("%lld\n",ans);}return 0;
}
转载于:https://www.cnblogs.com/SDUTNING/p/10260406.html
Misunderstood-Missing-逆向DP相关推荐
- [Ec Final 2018] Misunderstood … Missing
题目描述: 我有两个基本属性 一个 A 表示每次攻击可以造成的伤害,D为每轮自动增加的攻击力(A D初始值都为0 每轮你有三种操作(任选一个 1:造成 A+ai 的伤害 2:给 D 增加 Bi 的数值 ...
- 174. 地下城游戏 逆向dp
174. 地下城游戏 // // // 一些恶魔抓住了公主(P)并将她关在了地下城的右下角.地下城是由 M x N 个房间组成的二维网格.我们英勇的骑士(K)最初被安置在左上角的房间里,他必须穿 // ...
- UOJ #390 【UNR #3】百鸽笼 容斥+DP
题目分析 算法0 每个管理员选哪一列,将构成一个长度为 N − 1 N-1 N−1的序列,序列的种数可以通过经典的将 a a a个相同元素插入到一个没有该元素的长度为 b b b的序列里问题,轻松求出 ...
- 2018-2019 ACM-ICPC, Asia East Continent Finals题解
以下所有AC题解程序来自"仙客传奇"团队. A. Exotic - Ancient City 题解链接: 2018 EC-Final 部分题解 (A,J) ABCDEFGIJKL ...
- Leetcode Proble 汇总四
第一题: Permutations 分析:全排列问题,DFS即可. 代码: vector<int> visit; int size; vector<vector<int> ...
- 2021—10—31 上课笔记
DP主要的核心就是对于每道题专属的状态转移方程 动态规划过程是: 每次决策依赖于当前状态,又随即引起状态的转移.一个决策序列就是在变化的状态中产生出来的,所以,这种多阶段最优化决策解决问题的过程就称为 ...
- 2018-2019 ACM-ICPC, Asia East Continent Finals
2018-2019 ACM-ICPC, Asia East Continent Finals 在此附上吉老师的视频题解 Problem C:Heretical - Möbius 思路:根据莫比乌斯系数 ...
- 2018-2019 ACM-ICPC, Asia East Continent Finals D.F.I.L(VP)
专业打假赛 VP情况略,不会的题单独补了 D.Deja vu of - Go Players 题目分析 签到题,直接判断n,mn,mn,m大小关系即可. Code #include <bits/ ...
- SP1026 FAVDICE - Favorite Dice
题目描述 一个\(n(n \leq 1000)\)面的骰子,求期望掷几次能使得每一面都被掷到. 输入输出样例 输入样例#1: 2 1 12 输出样例#1: 1.00 37.24 思路:期望\(dp\) ...
最新文章
- 【Laravel学习篇 · 一】Windows下起步就遇麻烦
- Android中动态更新ListView
- Safair css hack
- java中true转换为int_在Java中将字节转换为int的最优雅的方式
- python——作用域 == is
- 战队不显示名字了_年仅17岁的新人选手!峡谷之巅1200分!被16家战队哄抢
- Sublime Text 3快捷键大全
- 2017全球超算峰会召开 联想以智能超算赋能AI时代
- 数库“SmarTag”数据体系正式登陆Factset另类数据市场
- xshell写JS脚本自动进行操作
- 网站图片如何批量下载教程
- ios-swift-环信集成
- 云空间插html音乐,【详细教程】如何在空间中引用网易云音乐
- android 清理工具,安卓清理君深度清理软件/真心强
- js禁止鼠标右键及F12禁止查看源代码
- 数据分析 # 深入分析近三年以来各大城市发展情况
- 论文阅读:Gradient Harmonized Single-stage Detector
- Intel MKL基础(4)MKL函数举例(BLAS and Sparse BLAS)
- 计算机组装 仿真交互,《计算机硬件组装》仿真交互系统设计与实现.doc
- pandas 常用的数学统计方法 mad()
热门文章
- CSDN-markdown编辑器使用方法
- [Android 插件化(二)] DroidPlugin 用法
- Android打包的那些事
- 【问链财经-区块链基础知识系列】 第四十七课 蚂蚁区块链的布局和打法
- JZOJ 3468. 【NOIP2013模拟联考7】OSU!(osu)
- JZOJ 5266. number
- matlab相关系数影像匹配_双目立体匹配步骤详解
- [USACO1.2]挤牛奶Milking Cows
- JZOJ__Day 9:【普及模拟】Square
- Codeforces 997E Good Subsegments (线段树)