【动态规划】Mathematical Curse
【来源】: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的更多相关文章
- ACM-ICPC2018焦作网络赛 Mathematical Curse(dp)
Mathematical Curse 22.25% 1000ms 65536K A prince of the Science Continent was imprisoned in a cast ...
- ACM-ICPC 2018 焦作赛区网络预赛 B题 Mathematical Curse
A prince of the Science Continent was imprisoned in a castle because of his contempt for mathematics ...
- ACM-ICPC 2018 焦作赛区网络预赛 B Mathematical Curse(DP)
https://nanti.jisuanke.com/t/31711 题意 m个符号必须按顺序全用,n个房间需顺序选择,有个初始值,问最后得到的值最大是多少. 分析 如果要求出最大解,维护最大值是不能 ...
- 2018焦作网络赛Mathematical Curse
题意:开始有个数k,有个数组和几个运算符.遍历数组的过程中花费一个运算符和数组当前元素运算.运算符必须按顺序花费,并且最后要花费完.问得到最大结果. 用maxv[x][y]记录到第x个元素,用完了第y ...
- 2018 ACM 网络选拔赛 焦作赛区
A. Magic Mirror #include <cstdio> #include <cstdlib> #include <cmath> #include < ...
- ACM-ICPC 2018 焦作赛区网络预赛 Solution
A. Magic Mirror 水. #include <bits/stdc++.h> using namespace std; int t; ]; inline bool work() ...
- ACM-ICPC 2018 焦作赛区网络预赛
这场打得还是比较爽的,但是队友差一点就再过一题,还是难受啊. 每天都有新的难过 A. Magic Mirror Jessie has a magic mirror. Every morning she ...
- [Reinforcement Learning] 动态规划(Planning)
动态规划 动态规划(Dynamic Programming,简称DP)是一种通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法. 动态规划常常适用于具有如下性质的问题: 具有最优子结构(Opt ...
- 焦作网络赛B-Mathematical Curse【dp】
A prince of the Science Continent was imprisoned in a castle because of his contempt for mathematics ...
随机推荐
- 利用ceph-deploy部署ceph存储集群
一.环境准备 创建两台主机,ip地址和主机名如下 192.168.2.100,主机名ceph-1 192.168.2.101,主机名ceph-2 每个主机 新增加一块数据盘,分区根据自己需要分区即可, ...
- pydub音频处理库的使用
pydub音频处理库的使用 在使用pydub这个模块之前应确保你的libav或者FFmpeg Mac上安装libav或FFmpeg brew install libav --with-libvorbi ...
- PAT L2-001 紧急救援 —— (多参数最短路)
和天梯中的直捣黄龙差不多.但是,通过这个问题,我对多参数最短路又有了更深一层的了解. 这题因为点数比较多,所以如果直接用大力学长的在G上dfs找最短路径的条数的话,会TLE,所以需要剪枝.剪枝方法是, ...
- shell编程之 ()[] {}
shell脚本中各种括号的区别以及用法 2018年08月19日 14:55:33 M_QiJunChao 阅读数:273 最近学到了shell脚本编程,觉得脚本中的不同括号有不同的用处,以及有些括 ...
- quartz中的corn表达式
一个Quartz的CronTrigger表达式分为七项子表达式,其中每一项以空格隔开,从左到右分别是:秒,分,时,月的某天,月,星期的某天,年:其中年不是必须的,也就是说任何一个表达式最少需要六项! ...
- Linux设备驱动程序 之 完成量
内核编程中常见的一种模式是,在当前线程之外初始化某个活动,然后等待该活动的结束:这个活动可能是,创建一个新的内核线程或者新的用户空间进程.对一个已有进程的某个请求,或者某种类型的硬件动作等: 内核提供 ...
- ElasticSearch1:基本概念
ElasticSearch的基本概念 es基本概念: Elasticsearch是面向文档型数据库,一条数据在这里就是一个文档,用JSON作为文档序列化的格式 NRT:Nearly Real Time ...
- No suitable constructor was found in NUnit Parameterised tests
No suitable constructor was found in NUnit Parameterised tests Fairly obvious, but can also happen i ...
- DataFactory生产手机号码
表中的数据类型是CHAR()类型的,才会出现,如右图的“Build a composite field”的这个功能: 固定部分设置 剩余变化部分设置 操作成功 数据库查询的结果
- React入门----基础篇
React 背景介绍 React 起源于 Facebook 的内部项目,因为该公司对市场上所有 JavaScript MVC 框架,都不满意,就决定自己写一套,用来架设 Instagram 的网站.做 ...