【动态规划】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 ...
随机推荐
- javaScript基础用Number()把其它类型转换为Number类型
一:基本类型 字符串 把字符串转换为数字,只要字符串中包含任意一个非有效数字字符(第一个点除外)结果都是NaN,空字符串会变为数字零 console.log(Number("12.5&quo ...
- linux上安装openssl的步骤
需要准备 openssl 稳定版文件: 从openssl官网下载最新的稳定版本,https://www.openssl.org/source/ 当前的稳定版是 openssl-fips-2.0.16 ...
- TCP学习
参考 https://coolshell.cn/articles/11564.html https://coolshell.cn/articles/11609.html
- div设置百分比高度 宽度
给div按百分比设置高度 宽度两种方法: 第一种是给body标签设置他的高度值,xxxpx,div就会根据body的像素值取百分比: 第二种方法就是在div属性中加入 position:absolut ...
- js怎么动态加载js文件(JavaScript性能优化篇)
下面介绍一种JS代码优化的一个小技巧,通过动态加载引入js外部文件来提高网页加载速度 [基本优化] 将所有需要的<script>标签都放在</body>之前,确保脚本执行之前完 ...
- HearthBuddy BotManager
MainWindow private void button_0_Click(object sender, RoutedEventArgs e) { Configuration.Instance.Sa ...
- tkinter入门-布局方式pack(), grid(), place()
pack 转载于https://www.cnblogs.com/kongzhagen/p/6144588.html\ 1. 使用pack函数的时候,默认先使用放到上面的,然后依次从上向下排 2. 可接 ...
- TreeView 三种状态 没多大变化 只是增加了很多函数以方便调用
using System.Drawing; using System.Windows.Forms; using System.ComponentModel; namespace SimpleCusto ...
- java.io.IOException: Cleartext HTTP traffic to xxx.xxx.xxx.xxx not permitted
java.io.IOException: Cleartext HTTP traffic to xxx.xxx.xxx.xxx not permitted 转 https://blog.csdn.net ...
- Tween(补间)动画
视图动画,也叫Tween(补间)动画可以在一个视图容器内执行一系列简单变换(位置.大小.旋转.透明度).譬如,如果你有一个TextView对象,您可以移动.旋转.缩放.透明度设置其文本,当然,如果它有 ...