【来源】:2018年焦作网络赛B

【题意】:

  有n个数字,有m个符号运算。通过不回头(即选取m个数有顺序可言),消除巫术的,并达到最大的价值。

  其实意思就是在数组里选取一段子序列,然后进行m次加减乘除的运算。最后使答案最大化。

【思路】:

  考虑DP,我们考虑加减时只需要考虑最大值即可,但是乘除两个运算的加入就会使这个题目变得复杂了。

  然后我们需要的记录最大值和最小值,因为每一个值可能是从最大值转移过来,也有可能最小值转移过来的。

  所以需要同时记录。

【注意】:

  1、记得初始化(多组数据)

  2、如果直接转移会耗费O(n^2),其实我们只是关心前i个里面获取的最大值,所以我们需要压缩,从前一个数字的暂存值进行更新。

 #include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e4+;
const int M = ;
const ll inf = 0x7fffffffffffffff;
ll dp[N][M][]; //0_ 最小值 ,1 最大值
ll a[N];
int main(){
int T;
int n,m,k;
char opt[M] ;
for( scanf("%d",&T) ; T ;T-- ){
scanf("%d%d%d",&n,&m,&k);
for(int i=;i<=n;i++) scanf("%lld",&a[i]);
scanf("%s",opt+); for(int i=;i<=n;i++){
for(int j=;j<=m;j++){
dp[i][j][] = inf ;
dp[i][j][] = -inf ;
}
} for(int i=;i<=n;i++){
dp[i][][] = dp[i][][] = k;
} for(int j=;j<=m;j++){
for(int i=;i<=n;i++){
if( i > j ){
dp[i][j][] = dp[i-][j][];
dp[i][j][] = dp[i-][j][];
} if( opt[j] =='+'){
dp[i][j][] = min( dp[i][j][] , dp[i-][j-][] + a[i] );
dp[i][j][] = min( dp[i][j][] , dp[i-][j-][] + a[i] ); dp[i][j][] = max( dp[i][j][] , dp[i-][j-][] + a[i] );
dp[i][j][] = max( dp[i][j][] , dp[i-][j-][] + a[i] );
}else if( opt[j] == '-'){
dp[i][j][] = min( dp[i][j][] , dp[i-][j-][] - a[i] );
dp[i][j][] = min( dp[i][j][] , dp[i-][j-][] - a[i] ); dp[i][j][] = max( dp[i][j][] , dp[i-][j-][] - a[i] );
dp[i][j][] = max( dp[i][j][] , dp[i-][j-][] - a[i] );
}else if( opt[j] == '*' ){
dp[i][j][] = min( dp[i][j][] , dp[i-][j-][] * a[i] );
dp[i][j][] = min( dp[i][j][] , dp[i-][j-][] * a[i] ); dp[i][j][] = max( dp[i][j][] , dp[i-][j-][] * a[i] );
dp[i][j][] = max( dp[i][j][] , dp[i-][j-][] * a[i] );
}else{
dp[i][j][] = min( dp[i][j][] , dp[i-][j-][] / a[i] );
dp[i][j][] = min( dp[i][j][] , dp[i-][j-][] / a[i] ); dp[i][j][] = max( dp[i][j][] , dp[i-][j-][] / a[i] );
dp[i][j][] = max( dp[i][j][] , dp[i-][j-][] / a[i] );
}
}
} printf("%lld\n",dp[n][m][]);
}
return ;
}

【动态规划】Mathematical Curse的更多相关文章

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

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

  2. ACM-ICPC 2018 焦作赛区网络预赛 B题 Mathematical Curse

    A prince of the Science Continent was imprisoned in a castle because of his contempt for mathematics ...

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

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

  4. 2018焦作网络赛Mathematical Curse

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

  5. 2018 ACM 网络选拔赛 焦作赛区

    A. Magic Mirror #include <cstdio> #include <cstdlib> #include <cmath> #include < ...

  6. ACM-ICPC 2018 焦作赛区网络预赛 Solution

    A. Magic Mirror 水. #include <bits/stdc++.h> using namespace std; int t; ]; inline bool work() ...

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

    这场打得还是比较爽的,但是队友差一点就再过一题,还是难受啊. 每天都有新的难过 A. Magic Mirror Jessie has a magic mirror. Every morning she ...

  8. [Reinforcement Learning] 动态规划(Planning)

    动态规划 动态规划(Dynamic Programming,简称DP)是一种通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法. 动态规划常常适用于具有如下性质的问题: 具有最优子结构(Opt ...

  9. 焦作网络赛B-Mathematical Curse【dp】

    A prince of the Science Continent was imprisoned in a castle because of his contempt for mathematics ...

随机推荐

  1. Codeforces 955C Sad powers(数论)

    Codeforces 955C Sad powers 题意 q组询问,每次询问给定L,R,求[L,R]区间内有多少个数可以写成ap的形式,其中a>0,p>1,1 ≤ L ≤ R ≤ 1e1 ...

  2. AVL平衡树(非指针实现)

    看了网上三四篇博客,学习了AVL树维护平衡的方式.但感觉他们给出的代码都有一点瑕疵或者遗漏,懂得了思想之后,花了一些时间把他们几篇的长处结合起来,没有使用指针,实现了一下.每个小逻辑功能都抽象成了函数 ...

  3. UVA 11174 Stand in a Line,UVA 1436 Counting heaps —— (组合数的好题)

    这两个题的模型是有n个人,有若干的关系表示谁是谁的父亲,让他们进行排队,且父亲必须排在儿子前面(不一定相邻).求排列数. 我们假设s[i]是i这个节点,他们一家子的总个数(或者换句话说,等于他的子孙数 ...

  4. [CSP-S模拟测试]:A(单调栈维护凸包+二分答案)

    题目传送门(内部题150) 输入格式 第一行两个整数$N,Q$. 接下来的$N$行,每行两个整数$a_i,b_i$. 接下来的$Q$行,每行一个整数$x$. 输出格式 对于每个询问,输出一行一个整数表 ...

  5. spring boot 下 开启 gzip

    [参考文章]:Spring boot开启Gzip压缩 [参考文章]:Accept-Encoding Spring 版本 :5.1.2-RELEASE 1. application.yml 配置 ser ...

  6. 修改网卡缓存,解决Linux 网卡丢包严重问题

    Linux 网卡丢包严重 生产中有一台linux设备并发比较大,droped包比较多,尤其是在跑游戏数据包的时候,存在严重的丢包现象,怀疑网卡性能不足,在更换设备前想能不有通过软件方法解决,通过网上一 ...

  7. shell远程操作另外一台机器上数据

    shell远程操作另外一台机器上的数据,有两种方式: 1 .配置免密登陆,2.使用sshpass 当前存在两台虚拟机,ip地址分别为:192.168.3.32 192.168.3.33 一.免密登陆操 ...

  8. Flutter移动电商实战 --(6)dio基础_Get_Post请求和动态组件协作

    上篇文章中,我们只看到了 dio 的使用方式,但并未跟应用关联起来,所以这一篇将 dio 网络请求与应用界面结合起来,当然这也是为以后的实战作基础准备,基础打牢,我们才能飞速前进. 1.案例说明 我们 ...

  9. 优化webpack打包速度方案

    基本原理要么不进行打包:要么缓存文件,不进行打包:要么加快打包速度. 不进行打包方案: 1,能够用CDN处理的用CDN处理,比如项目引入的第三方依赖jquery.js,百度编辑器 先进行打包或者缓存然 ...

  10. Django连接MySQL出错

    错误一:No module named 'MySQLdb' 原因:python3连接MySQL不能再使用mysqldb,取而代之的是pymysql. 解决方法:在python的MySQL包中,即路径: ...