ACM-ICPC 2018 焦作赛区网络预赛 B Mathematical Curse(DP)
https://nanti.jisuanke.com/t/31711
题意
m个符号必须按顺序全用,n个房间需顺序选择,有个初始值,问最后得到的值最大是多少。
分析
如果要求出最大解,维护最大值是不能得到的,因为有负数的参与,所以我们维护最大值和最小值。不管那么多,反正答案肯定是由极值产生的。
定义dp1[i][j]为用了i个符号,走了j间房后的最大值。因而dp2[][]就是对应的最小值。然后按要求转移。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 1e5 + ;
const int inf = 0x3f3f3f3f;
ll dp1[][],dp2[][];
int a[];
char f[];
int main(){
int n,m,k;
int t;
scanf("%d",&t);
while(t--){
scanf("%d%d%d",&n,&m,&k);
for(int i=;i<=n;i++) scanf("%d",&a[i]);
scanf("%s",f+);
//puts(f+1);
memset(dp1,-inf,sizeof(dp1));
memset(dp2,inf,sizeof(dp2));
for(int j=;j<=n;j++) dp1[][j]=dp2[][j]=k;
for(int i=;i<=m;i++){
for(int j=i;j<=n;j++){
dp1[i][j]=dp1[i][j-];
dp2[i][j]=dp2[i][j-];
if(f[i]=='+'){
dp1[i][j]=max(dp1[i][j],dp1[i-][j-]+a[j]);
dp2[i][j]=min(dp2[i][j],dp2[i-][j-]+a[j]);
}else if(f[i]=='-'){
dp1[i][j]=max(dp1[i][j],dp1[i-][j-]-a[j]);
dp2[i][j]=min(dp2[i][j],dp2[i-][j-]-a[j]);
}else if(f[i]=='*'){
dp1[i][j]=max(dp1[i][j],dp1[i-][j-]*a[j]);
dp1[i][j]=max(dp1[i][j],dp2[i-][j-]*a[j]);
dp2[i][j]=min(dp2[i][j],dp2[i-][j-]*a[j]);
dp2[i][j]=min(dp2[i][j],dp1[i-][j-]*a[j]);
}else{
dp1[i][j]=max(dp1[i][j],dp1[i-][j-]/a[j]);
dp1[i][j]=max(dp1[i][j],dp2[i-][j-]/a[j]);
dp2[i][j]=min(dp2[i][j],dp2[i-][j-]/a[j]);
dp2[i][j]=min(dp2[i][j],dp1[i-][j-]/a[j]);
}
}
}
printf("%lld\n",dp1[m][n]);
}
return ;
}
ACM-ICPC 2018 焦作赛区网络预赛 B Mathematical Curse(DP)的更多相关文章
- ACM-ICPC 2018 焦作赛区网络预赛- G:Give Candies(费马小定理,快速幂)
There are N children in kindergarten. Miss Li bought them NNN candies. To make the process more inte ...
- ACM-ICPC 2018 焦作赛区网络预赛- L:Poor God Water(BM模板/矩阵快速幂)
God Water likes to eat meat, fish and chocolate very much, but unfortunately, the doctor tells him t ...
- ACM-ICPC 2018 焦作赛区网络预赛
这场打得还是比较爽的,但是队友差一点就再过一题,还是难受啊. 每天都有新的难过 A. Magic Mirror Jessie has a magic mirror. Every morning she ...
- ACM-ICPC 2018 焦作赛区网络预赛J题 Participate in E-sports
Jessie and Justin want to participate in e-sports. E-sports contain many games, but they don't know ...
- ACM-ICPC 2018 焦作赛区网络预赛 K题 Transport Ship
There are NN different kinds of transport ships on the port. The i^{th}ith kind of ship can carry th ...
- ACM-ICPC 2018 焦作赛区网络预赛 L 题 Poor God Water
God Water likes to eat meat, fish and chocolate very much, but unfortunately, the doctor tells him t ...
- ACM-ICPC 2018 焦作赛区网络预赛 I题 Save the Room
Bob is a sorcerer. He lives in a cuboid room which has a length of AA, a width of BB and a height of ...
- ACM-ICPC 2018 焦作赛区网络预赛 H题 String and Times(SAM)
Now you have a string consists of uppercase letters, two integers AA and BB. We call a substring won ...
- ACM-ICPC 2018 焦作赛区网络预赛 G题 Give Candies
There are NN children in kindergarten. Miss Li bought them NN candies. To make the process more inte ...
随机推荐
- Chessboard POJ - 2446(最大流 || 匹配)
there is a pair of integers (x, y) in each line, which represents a hole in the y-th row, the x-th c ...
- 【XSY1591】卡片游戏 DP
题目描述 有标有数字为\(1\)~\(9\)的卡片各\(a_1,a_2\cdots a_9\)张,还有标有乘号的卡片\(m\)张.从中取出\(n\)张按任意顺序排列,取出两个乘号相邻和乘法在边界上的非 ...
- 【XSY1642】Another Boring Problem 树上莫队
题目大意 给你一棵\(n\)个点的树,每个点有一个颜色\(c_i\),每次给你\(x,y,k\),求从\(x\)到\(y\)的路径上出现次数第\(k\)多的颜色的出现次数 \(n,q\leq 1000 ...
- 运行os.fork()报AttributeError: module 'os' has no attribute 'fork'
现象 报错代码 def handle(s, c, db): pid = os.fork() if pid == 0: s.close() do_child(c, db) sys.exit() else ...
- MT【271】一道三角最值问题
若不等式$k\sin^2B+\sin A\sin C>19\sin B\sin C$对任意$\Delta ABC$都成立,则$k$的最小值为_____ 分析:由正弦定理得$k>\dfrac ...
- 洛谷CF264D Colorful Stones(子序列匹配,思维)
洛谷题目传送门 神仙思维题. 对于两个字符串的匹配问题,似乎之前蒟蒻写的HAOI2010最长公共子序列题解中提到的建网格图模型是一种套路? 给一个稍微强一点的样例(把字母换成了ABC) AABCB B ...
- 【Nowcoder71E】组一组(差分约束,最短路)
[Nowcoder71E]组一组(差分约束,最短路) 题面 Nowcoder 题解 看到二进制显然就直接拆位,那么区间的按位或和按位与转成前缀和之后,可以写成两个前缀和的值的差的大小关系,那么直接差分 ...
- [2017-7-28]Android Learning Day6
常用控件 Spinner DatePickerDialog TimePickerDiaog RadioButton CheckBox spinner(下拉菜单) <Spinner android ...
- 【Linux】Linux系统中的权限详解
我们linux服务器上有严格的权限等级,如果权限过高导致误操作会增加服务器的风险.所以对于了解linux系统中的各种权限及要给用户,服务等分配合理的权限十分重要. 一.文件基本权限 首先看下linux ...
- mysql 单表卡死
由于单表数据量过大导致的更新操作处于卡死状态,无法打开也无法修改. 此时需要命令行模式连接数据库,注意点:此处连接需要相同的账号 1. $ SHOW PROCESSLIST; 2. $ kill 37 ...