【动态规划】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 ...
随机推荐
- LeetCode 141. 环形链表(Linked List Cycle)
题目描述 给定一个链表,判断链表中是否有环. 进阶:你能否不使用额外空间解决此题? 解题思路 快慢指针,慢指针一次走一步,快指针一次走两步,若两者相遇则说明有环,快指针无路可走则说明无环. 代码 /* ...
- R语言:怎么进行异常检测
a <- try(as.Date('2017-02-30'),silent = T) 当silent为F是,错误消息还是会返回 怎么检测a是否出错呢:if('try-error' %in% cl ...
- APP消息推送是否进入消息中心和click、receive事件分析
前端时间研究APP消息推送的机制,由于机型.版本的碎片化,消息推送的机制不太好理解,所以总结下,放在博文里以备后续查阅. 安卓Android系统的消息推送: 安卓 推送方式 应用状态 类型 消 ...
- nginx不间断服务平滑升级
(1)备份旧的nginx和配置文件 cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/bak_nginx #备份旧版程序 cp /usr/loc ...
- Flink初探wordCout
知识点 Flink介绍 1.无界数据-->数据不断产生 2.有界数据-->最终不再改变的数据 3.有界数据集是无界数据集的一个特例 4.有界数据集在flink内部是以一种终态数据集进行处理 ...
- Callable和Supplier的区别
A Callable is "A task that returns a result, while a Supplier is "a supplier of results&qu ...
- haproxy-负载均衡介绍
参考:http://www.iyunv.com/thread-252539-1-1.html 负载均衡介绍 四层和七层负载均衡的区别 四层 所谓的四层就是ISO参考模型中的第四层.四层负载均衡也称为四 ...
- C# 创建、部署和调用WebService的示例
http://www.cnblogs.com/Brambling/p/6815565.html
- mysql 截取字符函数substring(param1,param2,param3) 的用法
substring(paramter1,paramter2,paramter3) 截取字段长度 paramter1 被截取的字段paramter2 从第几位开始截取,负数表示从末尾开始数,的位数开始 ...
- git显示不出来图标标志
git操作的文件夹,发现没有显示出来是否上传的绿色图标,这样导致不清楚哪些文件是否修改,是否上传. 以下方法让我的问题解决了,但我并不知道是不是所有人的问题都适用这种方法,如果你也遇到这种问题,可以尝 ...