焦作网络赛B-Mathematical Curse【dp】
A prince of the Science Continent was imprisoned in a castle because of his contempt for mathematics when he was young, and was entangled in some mathematical curses. He studied hard until he reached adulthood and decided to use his knowledge to escape the castle.
There are NN rooms from the place where he was imprisoned to the exit of the castle. In the i^{th}ith room, there is a wizard who has a resentment value of a[i]a[i]. The prince has MM curses, the j^{th}jth curse is f[j]f[j], and f[j]f[j] represents one of the four arithmetic operations, namely addition('+'
), subtraction('-'
), multiplication('*'
), and integer division('/'
). The prince's initial resentment value is KK. Entering a room and fighting with the wizard will eliminate a curse, but the prince's resentment value will become the result of the arithmetic operation f[j]f[j] with the wizard's resentment value. That is, if the prince eliminates the j^{th}jth curse in the i^{th}ith room, then his resentment value will change from xx to (x\ f[j]\ a[i]x f[j] a[i]), for example, when x=1, a[i]=2, f[j]=x=1,a[i]=2,f[j]='+'
, then xx will become 1+2=31+2=3.
Before the prince escapes from the castle, he must eliminate all the curses. He must go from a[1]a[1] to a[N]a[N] in order and cannot turn back. He must also eliminate the f[1]f[1] to f[M]f[M] curses in order(It is guaranteed that N\ge MN≥M). What is the maximum resentment value that the prince may have when he leaves the castle?
Input
The first line contains an integer T(1 \le T \le 1000)T(1≤T≤1000), which is the number of test cases.
For each test case, the first line contains three non-zero integers: N(1 \le N \le 1000), M(1 \le M \le 5)N(1≤N≤1000),M(1≤M≤5) and K(-1000 \le K \le 1000K(−1000≤K≤1000), the second line contains NN non-zero integers: a[1], a[2], ..., a[N](-1000 \le a[i] \le 1000)a[1],a[2],...,a[N](−1000≤a[i]≤1000), and the third line contains MM characters: f[1], f[2], ..., f[M](f[j] =f[1],f[2],...,f[M](f[j]='+','-','*','/'
, with no spaces in between.
Output
For each test case, output one line containing a single integer.
样例输入复制
3
2 1 5
2 3
/
3 2 1
1 2 3
++
4 4 5
1 2 3 4
+-*/
样例输出复制
2
6
3
题目来源
题意:
有1-n间房 每间有一个数ai
有1-m个操作fj 每种操作可能是+-*/
有一个初始值k 走到第i个房间如果进行了第j个操作 得到结果k fj ai
房间和操作的顺序不能改变
问最后得到的最大值
思路:
就是一个比较简单的dp 发现自己dp总是写不好
最近不如多练点dp吧
dp[i][j]表示在第i间房做j个操作 i一定是不能小于j
加和减的话比较常规 乘除涉及到负数的话就不一定了
所以需要既存最大值也要存最小值
还要注意初始化的赋值
//#include"pch.h" #include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<stack>
#include<queue>
#include<map>
#include<vector>
#include<cmath>
#include<cstring>
#include<set>
#include<stack>
//#include<bits/stdc++.h> #define inf 0x3f3f3f3f
using namespace std;
typedef long long LL; const int maxn = ;
int t;
int n, m, k;
int a[maxn];
LL dpmin[maxn][], dpmax[maxn][];
char f[]; int main()
{ scanf("%d", &t);
while (t--) {
memset(dpmax, -inf, sizeof(dpmax));
memset(dpmin, inf, sizeof(dpmin));
//cout<<dpmax[0][0]<<endl<<dpmin[0][0]<<endl;
scanf("%d%d%d", &n, &m, &k);
for (int i = ; i <= n; i++) {
scanf("%d", &a[i]);
}
getchar();
for (int i = ; i <= m; i++) {
scanf("%c", &f[i]);
} for (int i = ; i <= n; i++) {
dpmax[i][] = dpmin[i][] = k;
}
for (int j = ; j <= m; j++) {
for (int i = j; i <= n; i++) {
dpmax[i][j] = dpmax[i - ][j];//第i间不做
dpmin[i][j] = dpmin[i - ][j];
if (f[j] == '+') {
dpmax[i][j] = max(dpmax[i][j], dpmax[i - ][j - ] + a[i]);
dpmin[i][j] = min(dpmin[i][j], dpmin[i - ][j - ] + a[i]);
}
if (f[j] == '-') {
dpmax[i][j] = max(dpmax[i][j], dpmax[i - ][j - ] - a[i]);
dpmin[i][j] = min(dpmin[i][j], dpmin[i - ][j - ] - a[i]);
}
if (f[j] == '*') {
dpmax[i][j] = max(dpmax[i][j], dpmax[i - ][j - ] * a[i]);
dpmax[i][j] = max(dpmax[i][j], dpmin[i - ][j - ] * a[i]);
dpmin[i][j] = min(dpmin[i][j], dpmax[i - ][j - ] * a[i]);
dpmin[i][j] = min(dpmin[i][j], dpmin[i - ][j - ] * a[i]);
}
if (f[j] == '/') {
dpmax[i][j] = max(dpmax[i][j], dpmax[i - ][j - ] / a[i]);
dpmax[i][j] = max(dpmax[i][j], dpmin[i - ][j - ] / a[i]);
dpmin[i][j] = min(dpmin[i][j], dpmax[i - ][j - ] / a[i]);
dpmin[i][j] = min(dpmin[i][j], dpmin[i - ][j - ] / a[i]);
}
}
}
printf("%lld\n", dpmax[n][m]);
}
return ;
}
焦作网络赛B-Mathematical Curse【dp】的更多相关文章
- ACM-ICPC 2018 焦作赛区网络预赛 B Mathematical Curse(DP)
https://nanti.jisuanke.com/t/31711 题意 m个符号必须按顺序全用,n个房间需顺序选择,有个初始值,问最后得到的值最大是多少. 分析 如果要求出最大解,维护最大值是不能 ...
- 焦作网络赛K-Transport Ship【dp】
There are NN different kinds of transport ships on the port. The i^{th}ith kind of ship can carry th ...
- ACM-ICPC2018焦作网络赛 Mathematical Curse(dp)
Mathematical Curse 22.25% 1000ms 65536K A prince of the Science Continent was imprisoned in a cast ...
- 2018 ICPC 焦作网络赛 E.Jiu Yuan Wants to Eat
题意:四个操作,区间加,区间每个数乘,区间的数变成 2^64-1-x,求区间和. 题解:2^64-1-x=(2^64-1)-x 因为模数为2^64,-x%2^64=-1*x%2^64 由负数取模的性质 ...
- 2018焦作网络赛Mathematical Curse
题意:开始有个数k,有个数组和几个运算符.遍历数组的过程中花费一个运算符和数组当前元素运算.运算符必须按顺序花费,并且最后要花费完.问得到最大结果. 用maxv[x][y]记录到第x个元素,用完了第y ...
- ACM-ICPC2018焦作网络赛 Transport Ship(二进制背包+方案数)
Transport Ship 25.78% 1000ms 65536K There are NN different kinds of transport ships on the port. T ...
- 焦作网络赛E-JiuYuanWantstoEat【树链剖分】【线段树】
You ye Jiu yuan is the daughter of the Great GOD Emancipator. And when she becomes an adult, she wil ...
- 焦作网络赛L-Poor God Water【矩阵快速幂】
God Water likes to eat meat, fish and chocolate very much, but unfortunately, the doctor tells him t ...
- ACM-ICPC2018焦作网络赛 Participate in E-sports(大数开方)
Participate in E-sports 11.44% 1000ms 65536K Jessie and Justin want to participate in e-sports. E- ...
随机推荐
- HTC Desire 816 root教程和方法
每个手机入手之后基本上都需要进行root,不root的话,手机里很多的无有软件都删除不了,咱们的HTC Desire 816也是一样的,也需要进行root才可以删除系统里自带的那些无用的软件,这些软件 ...
- python 模块之间相互引用
模块层级关系: ----: |->AA.py |->BB.py |->CC.py AA.py from BB import BB class AA: def sub(self, x) ...
- php date strtotime的用法
1.上个月第一天及最后一天. echo date('Y-m-01', strtotime('-1 month')); echo strtotime(date('Y-m-01 0:00:00', str ...
- 微服务 通过EnableFeignClients调用其他服务的api
今天在项目上遇到一个问题,通过当前service服务要调用到其他service服务的api接口时,可通过EnableFeignClients调用其他服务的api,大概的步骤如下: 1.在springb ...
- ubuntu server install 安装中文(搜狗)输入法
1.对于ubuntu server默认无中文输入法框架,我比较倾向于我一直使用的ibus-sunpinyin.这里我需要先安装ibus的框架 不过我遇到了问题: dpkg: dependency pr ...
- 一个牛人给Java初学者的建议
学习Java的同学注意了!!! 学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入Java学习交流群,群号码:618528494 我们一起学Java! 给初学者之一:浅谈Java及应用学java ...
- datatables隐藏列排序
var tableOption = { id: 'cacScriptTable', order: [[2, 'desc'],[1, 'desc']],//以第三列‘updatedAt’排序,如果第三列 ...
- 使用Dreamweaver开发php
1.新建站点,开发的目录 2.服务器,服务器的目录 (并修改为“测试”) 3.必须结合WANP5
- linux,shell中if else if的写法,if elif
需求描述: 在写shell脚本的过程中,用到了if else的写法,突然有多个参数需要判断 那么就想到了if else if的用法,于是进行如下的测试. 测试过程: 1.写如下的测试脚本,进行多个值的 ...
- javascript测试框架 Mocha 实例教程
http://www.ruanyifeng.com/blog/2015/12/a-mocha-tutorial-of-examples.html