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

题目来源

ACM-ICPC 2018 焦作赛区网络预赛

编辑代码
 

题意:

有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】的更多相关文章

  1. ACM-ICPC 2018 焦作赛区网络预赛 B Mathematical Curse(DP)

    https://nanti.jisuanke.com/t/31711 题意 m个符号必须按顺序全用,n个房间需顺序选择,有个初始值,问最后得到的值最大是多少. 分析 如果要求出最大解,维护最大值是不能 ...

  2. 焦作网络赛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 ...

  3. ACM-ICPC2018焦作网络赛 Mathematical Curse(dp)

    Mathematical Curse 22.25% 1000ms 65536K   A prince of the Science Continent was imprisoned in a cast ...

  4. 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 由负数取模的性质 ...

  5. 2018焦作网络赛Mathematical Curse

    题意:开始有个数k,有个数组和几个运算符.遍历数组的过程中花费一个运算符和数组当前元素运算.运算符必须按顺序花费,并且最后要花费完.问得到最大结果. 用maxv[x][y]记录到第x个元素,用完了第y ...

  6. ACM-ICPC2018焦作网络赛 Transport Ship(二进制背包+方案数)

    Transport Ship 25.78% 1000ms 65536K   There are NN different kinds of transport ships on the port. T ...

  7. 焦作网络赛E-JiuYuanWantstoEat【树链剖分】【线段树】

    You ye Jiu yuan is the daughter of the Great GOD Emancipator. And when she becomes an adult, she wil ...

  8. 焦作网络赛L-Poor God Water【矩阵快速幂】

    God Water likes to eat meat, fish and chocolate very much, but unfortunately, the doctor tells him t ...

  9. ACM-ICPC2018焦作网络赛 Participate in E-sports(大数开方)

    Participate in E-sports 11.44% 1000ms 65536K   Jessie and Justin want to participate in e-sports. E- ...

随机推荐

  1. Android isUserAMonkey()

    Monkey是Android上的一个自动化测试工具.产生随机事件由于压力测试等. ActivityManager.isUserAMonkey()判断当前是否有运行的Monkey测试.有就返回true. ...

  2. 下列没有直接采用XML技术的是( )

    A. UDDI B. SOAP C. AJAX D.DCOM 解答:D DCOM(分布式组件对象模型,分布式组件对象模式)是一系列微软的概念和程序接口,利用这个接口,客户端程序对象能够请求来自网络中另 ...

  3. e638. 向剪切板获取和粘贴图像

    // If an image is on the system clipboard, this method returns it; // otherwise it returns null. pub ...

  4. perl readlink 函数-返回软链接指向的文件

    readlink 函数专门用于处理链接,可以返回该链接指向的文件的路径 代码示例: print readlink($prog) if (-f $prog && -l $prog):

  5. AssetBundle之LoadFromCacheOrDownload()取代"new WWW (url)的作用

    1.为了充分利用缓存功能.2.缓存的资源包完全由文件名和版本号唯一标识,URL所有域名和路径信息在缓存被忽略.3.由于缓存的资源包通过文件名而不是完整的URL来识别,在任何时候资源包被下载,你可以更改 ...

  6. 在MathType如何让括号随内容自动调整大小的技巧

    MathType软件是一款数学公式编辑器工具可以轻松输入各种复杂的公式和符号,与Office文档完美结合,显示效果超好,比Office自带的公式编辑器要强大很多.但是很多的新手朋友不知道在MathTy ...

  7. POJ 1426 Find The Multiple(背包方案统计)

    Description Given a positive integer n, write a program to find out a nonzero multiple m of n whose ...

  8. Ext3.4--TreeGridDemo

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="CategoryProper ...

  9. Vs2010创建WebService

    在Visual Studio 2010中已经找不到直接创建WebService的模板方式了,但下面的方法可心实现: 在 Visual Studio 2010 的新建 Web 应用程序或者 Web 网站 ...

  10. iOS根据文字字数动态确定Label宽高

    我们有时候在写项目的时候,会碰到,意见反馈,还有其他地方,讲座活动细则等需要大篇展示的文本, 因为每次服务器返回的内容大小不一,所以需要动态的调整label的宽高: 在ios 6 的时候可以: -(v ...