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 girl watching is pursuing in chaos. Rikka reached out her hand and got the garland on her head, finding LCR with the immortal smile. The dream ended up waking, but the doubts will never disappear. In the end, without knowing about LCR, Rikka was invited to Shuyuan Men, a street of Chinese traditional arts in Xi'an.
"Is it enough to use the stored wires?"
"No problem... Those leaders are only concerned about expanding EC Final for the school's and their 'achievements'. All chores are ours. It is fine to simply connect those wiring boards in the series for each row."
Their conversation engaged Rikka. Feeling strange, she decided to follow them. But before all, she needs to beat the devil in her heart.
Rikka has an aggressivity $A$ and an increment $D$ of it, which are both $0$ initially. There are $n$ rounds in total. For $i=1,2,…,n$, at the beginning of $i$-th round Rikka's aggressivity $A$ increases by the increment $D$, and then she can do one of the following:
Attack and cause a damage of $(A+a_i)$.
Use the Omnipotent Garland from LCR to increase the increment $D$ by $b_i$.
Use her Schwarz Sechs Prototype Mark II to increase the aggressivity $A$ by $c_i$.
Rikka wonders the maximal possible damage she could cause in total. Could you help her?
Input
The first line contains a single integer $T (1 \le T \le 10)$, the number of test cases. Then $T$ test cases follow.
The input format of each test case is as follows:
The first line contains a single integer $n (1 \le n \le 100)$, the number of rounds.
The following $n$ lines contain ${a_i},{b_i},{c_i}$ for $i=1,2,…,n$. The $i$-th line among them contains three integers $a_i,b_i,c_i (1 \le a_i,b_i,c_i \le 10^9)$ separated by spaces in order.
It is guaranteed that the sum of $n$ in all test cases is at most 100.
Output
Output T lines; each line contains one integer, the answer to that test case.
Example
input
3
2
3 1 2
3 1 2
3
3 1 2
3 1 2
3 1 2
5
3 1 2
3 1 2
3 1 2
3 1 2
3 1 2
output
6
10
24
题意:
打怪,有 $A$ 的攻击力,有 $D$ 的成长,初始均为 $0$,有 $n$ 轮。
同时有三个数组 $a[1:n], b[1:n], c[1:n]$。
对于每一轮:
首先,攻击力永久性成长 $A = A + D$;然后,在下面三个选择中选择一种行为:
①、发起进攻,产生 $A + a_i$ 的伤害。
②、增加成长 $D = D + b_i$。
③、永久性增加攻击力 $A = A + c_i$。
问产生最大总伤害为多少。
题解:
onsite的时候,正向DP想不出来,没考虑逆向的DP。
不妨先将 $dp[i]$ 所表达的状态是从第 $i$ 轮开始进行攻击,到 $n$ 轮结束,那么自然地,其所存储的值是产生最大的伤害。
同时,假设 $dp[i+1]$ 已知,那么如果在第 $i+1$ 轮前面加一轮,不难计算第 $i$ 轮的三种选择产生的影响:
第 $i$ 轮选择①,则多产生 $a_i$ 的伤害。
第 $i$ 轮选择②,则成长增加了 $b_i$,假设其后在第 $j$ 轮进行一次攻击,则会多产生伤害 $(j-i) \cdot b_i$。
第 $i$ 轮选择③,则攻击力增加了 $c_i$,假设其后在第 $j$ 轮进行一次攻击,则会比原来产生的伤害增加 $c_i$。
不妨为 $dp[i]$ 再加两个状态:从第 $i$ 轮起,到第 $n$ 轮总共进行了 $cnt$ 次攻击;这 $cnt$ 次攻击的编号之和为 $sum$。
这样一来,上述第 $i$ 轮的三种选择,多产生的伤害分别为:$a_i$,$(sum-cnt \cdot i) \cdot b_i$ 和 $cnt \cdot c_i$。
总结一下,就是 $dp[i][cnt][sum]$ 代表:假设当前游戏是从第 $i$ 轮开始进行攻击的,到第 $n$ 轮结束,一共进行了 $cnt$ 次攻击,它们的轮编号之和为 $sum$,总共最大能产生多少伤害。
那么显然的,递推的起点就是 $dp[n][1][n] = a_n$;而 $dp[1][\cdots][\cdots]$ 中的最大值即为答案。
而状态转移可以如下进行倒推:
① $dp[i][cnt][sum] = max(dp[i][cnt][sum], dp[i+1][cnt-1][sum-i] + a_i )$
② $dp[i][cnt][sum] = max(dp[i][cnt][sum], dp[i+1][cnt][sum] + (sum-cnt \cdot i) \cdot b_i )$
③ $dp[i][cnt][sum] = max(dp[i][cnt][sum], dp[i+1][cnt][sum] + cnt \cdot c_i )$
然后,还有一个需要注意的点是,这样一来 $dp[i][cnt][sum]$ 的大小是 $100 \times 100 \times (1+\cdots+100)$,会MLE。需要进行滚动优化。
AC代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int n;
ll dp[][][];
ll a[],b[],c[];
int main()
{
ios::sync_with_stdio();
cin.tie(), cout.tie(); int T;
cin>>T;
while(T--)
{
cin>>n;
for(int i=;i<=n;i++) cin>>a[i]>>b[i]>>c[i]; memset(dp,,sizeof(dp));
dp[n&][][n]=a[n];
for(int i=n-;i>=;i--)
{
for(int j=;j<=n-i;j++)
{
int down=(i+i+j)*(j-)/+n, up=(n+n-j+)*j/;
for(int k=down;k<=up;k++)
{
dp[i&][j+][k+i]=max(dp[i&][j+][k+i],dp[(i+)&][j][k]+a[i]);
dp[i&][j][k]=max(dp[i&][j][k],dp[(i+)&][j][k]+j*c[i]);
dp[i&][j][k]=max(dp[i&][j][k],dp[(i+)&][j][k]+(k-j*i)*b[i]);
}
}
}
ll ans=;
for(int j=;j<=n;j++) for(int k=;k<=;k++) ans=max(ans,dp[][j][k]);
cout<<ans<<endl;
}
}
Gym 102056I - Misunderstood … Missing - [DP][The 2018 ICPC Asia-East Continent Final Problem I]的更多相关文章
- 2018 ICPC Asia Singapore Regional A. Largest Triangle (计算几何)
题目链接:Kattis - largesttriangle Description Given \(N\) points on a \(2\)-dimensional space, determine ...
- 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 102056L - Eventual … Journey - [分类讨论][The 2018 ICPC Asia-East Continent Final Problem L]
题目链接:https://codeforces.com/gym/102056/problem/L LCR is really an incredible being. Thinking so, sit ...
- Gym - 101981M The 2018 ICPC Asia Nanjing Regional Contest M.Mediocre String Problem Manacher+扩增KMP
题面 题意:给你2个串(长度1e6),在第一个串里找“s1s2s3”,第二个串里找“s4”,拼接后,是一个回文串,求方案数 题解:知道s1和s4回文,s2和s3回文,所以我们枚举s1的右端点,s1的长 ...
- Gym - 101981K The 2018 ICPC Asia Nanjing Regional Contest K.Kangaroo Puzzle 暴力或随机
题面 题意:给你1个20*20的格子图,有的是障碍有的是怪,你可以每次指定上下左右的方向,然后所有怪都会向那个方向走, 如果2个怪撞上了,就融合在一起,让你给不超过5w步,让所有怪都融合 题解:我们可 ...
- Gym - 101981G The 2018 ICPC Asia Nanjing Regional Contest G.Pyramid 找规律
题面 题意:数一个n阶三角形中,有多少个全等三角形,n<=1e9 题解:拿到题想找规律,手画开始一直数漏....,最后还是打了个表 (打表就是随便定个点为(0,0),然后(2,0),(4,0), ...
- Gym - 101981I The 2018 ICPC Asia Nanjing Regional Contest I.Magic Potion 最大流
题面 题意:n个英雄,m个怪兽,第i个英雄可以打第i个集合里的一个怪兽,一个怪兽可以在多个集合里,有k瓶药水,每个英雄最多喝一次,可以多打一只怪兽,求最多打多少只 n,m,k<=500 题解:显 ...
- Gym - 101981D The 2018 ICPC Asia Nanjing Regional Contest D.Country Meow 最小球覆盖
题面 题意:给你100个三维空间里的点,让你求一个点,使得他到所有点距离最大的值最小,也就是让你找一个最小的球覆盖掉这n个点 题解:红书模板题,这题也因为数据小,精度也不高,所以也可以用随机算法,模拟 ...
- Gym - 101981J The 2018 ICPC Asia Nanjing Regional Contest J.Prime Game 计数
题面 题意:1e6的数组(1<a[i]<1e6), mul (l,r) =l × (l+1) ×...× r, fac(l,r) 代表 mul(l,r) 中不同素因子的个数,求s ...
随机推荐
- 汉字编码 (GB2312 GBK GB18030)
GB2312 收录简化汉字及符号.字母.日文假名等共7445个图形字符,其中汉字占6763个 每个符号都用两个字节表示,每个字节均采用七位编码表示,习惯上 第一个字节是高字节,第二个字节是低字节 GB ...
- Windows平台下nginx跨域配置
1)下载地址: http://nginx.org 2)启动 解压至d:\nginx,运行nginx.exe(即nginx -c conf\nginx.conf),默认使用80端口,日志见文件夹D:\n ...
- [MHA]master_ip_failover 测试可以使用的IP 地址切换脚本
#!/usr/bin/env perluse strict;use warnings FATAL => 'all'; use Getopt::Long; my ( $command, ...
- 【C++】C++中typedef、auto与decltype的作用
typedef 类型别名(type alias)是一个名字,使用typedef不会真正地创建一种新的数据类型,它只是已经存在数据类型的一个新名称.语法: typedef type name; 其中ty ...
- mac 使用笔记日志
telnet安装 安装homebrew /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/i ...
- go 源码学习之---Tail 源码分析
已经有两个月没有写博客了,也有好几个月没有看go相关的内容了,由于工作原因最近在做java以及大数据相关的内容,导致最近工作较忙,博客停止了更新,正好想捡起之前go的东西,所以找了一个源码学习 这个也 ...
- nginx伪静态配置教程总结
在nginx中配置伪静态,也就是常说的url重写功能,只需在nginx.conf配置文件中写入重写规则即可. 当然,这个规则是需要熟悉正则表达式,只掌握nginx自身的正则匹配模式即可,对正则不了解的 ...
- 关于Java 软件工程师应该知道或掌握的技术栈
鄙人星云,今天突然想写这么一篇需要持续更新的文章,主要目的用于总结当前最流行的技术和工具,方便自己也方便他人. 更新时间:2018-10-23 09:26:19 码农职业路径图 码农入门职业路径图 J ...
- MySQL主从复制作用和原理
一.什么是主从复制?主从复制,是用来建立一个和主数据库完全一样的数据库环境,称为从数据库:主数据库一般是准实时的业务数据库. 二.主从复制的作用1.做数据的热备,作为后备数据库,主数据库服务器故障后, ...
- Protobuf3 序列化
在message_lite.h中定义了SerializeToString ,SerializeToArray ,SerializeToCodedStream ,SerializeToZeroCopyS ...