Misunderstood-Missing-逆向DP
记忆深刻......打铁没做出来的题
题意 :
打怪,有 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;
}
Misunderstood-Missing-逆向DP的更多相关文章
- 2018-2019 ACM-ICPC, Asia East Continent Finals I. Misunderstood … Missing(dp)
题目链接: http://codeforces.com/gym/102056/problem/I 题意: 人物有l两个属性分别是$A,D$ 每个回合人物$A\pm D$ 每个回合有三个选择分别是: 1 ...
- Gym 102056I - Misunderstood … Missing - [DP][The 2018 ICPC Asia-East Continent Final Problem I]
题目链接:https://codeforces.com/gym/102056/problem/I Warm sunshine, cool wind and a fine day, while the ...
- 2018-2019 ACM-ICPC ECfinal I. Misunderstood … Missing
题目链接 首先有两个个属性值:\(A,D\),其中\(A\)表示目前攻击力,\(D\)表示每回合攻击的增量. 现在一共有\(n\)个回合,每一回合\(i\),可以有以下三种操作: 1.进行攻击,造成\ ...
- 174. 地下城游戏(逆向DP)
Q: 一些恶魔抓住了公主(P)并将她关在了地下城的右下角.地下城是由 M x N 个房间组成的二维网格.我们英勇的骑士(K)最初被安置在左上角的房间里,他必须穿过地下城并通过对抗恶魔来拯救公主. 骑士 ...
- G - Surf Gym - 100819S -逆向背包DP
G - Surf Gym - 100819S 思路 :有点类似 逆向背包DP , 因为这些事件发生后是对后面的时间有影响. 所以,我们 进行逆向DP,具体 见代码实现. #include<bit ...
- 2018-2019 ACM-ICPC, Asia East Continent Finals Solution
D. Deja vu of … Go Players 签. #include <bits/stdc++.h> using namespace std; int t, n, m; int m ...
- 2018 icpc-ecfinal后记
打完这场终于可以回校0基础预习一个学期的课程了. 安详.jpg 可惜了,差了点罚时没有拿银,不过有了徐州差一分钟银牌的经历之后,已经没有什么能让我遗憾了. 仿佛又打了一场半年前的西安邀请赛,区别 ...
- AMR11A - Magic Grid
Thanks a lot for helping Harry Potter in finding the Sorcerer's Stone of Immortality in October. Did ...
- SP1026 FAVDICE - Favorite Dice
题目描述 一个\(n(n \leq 1000)\)面的骰子,求期望掷几次能使得每一面都被掷到. 输入输出样例 输入样例#1: 2 1 12 输出样例#1: 1.00 37.24 思路:期望\(dp\) ...
随机推荐
- 二.Rsync备份服务
自己动手部署一遍 期中架构-第二章-备份服务笔记====================================================================== 01. 课 ...
- IEDA序列化设置
- 手机app数据的爬取之mitmproxy安装教程
mitmproxy是一个支持HTTP和HTTPS的抓包程序,类似Fiddler.Charles的功能,只不过它通过控制台的形式操作. 此外,mitmproxy还有两个关联组件,一个是mitmdump, ...
- sublime快捷键的使用
Sublime text 3是码农最喜欢的代码编辑器,每天和代码打交道,必先利其器,掌握基本的代码编辑器的快捷键,能让你打码更有效率.刚开始可能有些生疏,只要花一两个星期坚持使用并熟悉这些常用的快捷键 ...
- mysql的innodb存储引擎
innodb是支持事务的存储引擎,支持ACID特性的ACID(指数据库事务正确执行的四个基本要素的缩写) 包含:原子性(Atomicity).一致性(Consistency).隔离性(Isolatio ...
- mac pro 基本使用
command+空格 调出搜索框 可以输入:网络,就是配置ip等信息 可以输入:终端,就是命令行窗口 可以输入:触控板,可以调节多点触控版 可以输入:系统偏好设置,进行配置 触控板:多点触控——两个 ...
- OpenCV-Python入门教程1-图片
首先感觉学习OpenCV-python最好的学习工具官方的英文文档. 官方英文教程:OpenCV-Python Tutorials 我使用的是anaconda里的 jupyter notebook.至 ...
- Html 文字排版
文字竖立排版,方法一 @{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="v ...
- Win10 配置Tomcat与Java环境变量
一:下载JKD与Tomcat包 JDK 密码:d9ym Tomcat 密码:z9pa 二:安装JAVA-JDK与配置环境变量 ①:记住安装的地址 ②:配置JAVA-JDK的环境变量, ...
- python---通过递归和动态规划策略解决找零钱问题
也是常见套路. # coding = utf-8 def rec_mc(coin_value_list, change, know_results): min_coins = change if ch ...