题目链接:点击查看

题目大意:给出一个长度为 n 的序列,每个元素只由 -1 , 0 , 1 组成,现在要求在相邻两个元素之间添加一个符号,共添加 n - 1 个符号,符号可以选择加号或乘号,问如何选择能使得结果最大

题目分析:第一反应想到用栈模拟,为了让总结果最大,对于 1 来说肯定加上最优,对于 0 来说,肯定是用于抵消 -1 最优,对于 -1 来说,肯定是与 -1 相乘生成 1 最优,但是有下列两种情况比较特殊:

  1. -1 1 -1
  2. -1 1 1 -1

这两种情况的组合显然答案是 1 更优,但是直接模拟的话是不太容易的,所以我们可以使用 dp 来解决,因为总和上面的规则,我们得出:设 dp[ i ] 是处理到第 i 位为止的答案,那么对于位置 i 来说,最优解肯定是前四项、前三项、前两项、前一项相乘获得的最大值加上相应位置转移而来的,所以直接 O( n ) 维护就好了

代码:

#include<iostream>
#include<cstdio>
#include<string>
#include<ctime>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<stack>
#include<climits>
#include<queue>
#include<map>
#include<set>
#include<sstream>
#include<cassert>
using namespace std;typedef long long LL;typedef unsigned long long ull;const int inf=0x3f3f3f3f;const int N=1e6+100;int a[N],dp[N];int main()
{
#ifndef ONLINE_JUDGE
//  freopen("input.txt","r",stdin);
//  freopen("output.txt","w",stdout);
#endif
//  ios::sync_with_stdio(false);int w;cin>>w;while(w--){memset(dp,-inf,sizeof(dp));int n;scanf("%d",&n);for(int i=1;i<=n;i++)scanf("%d",a+i);dp[0]=0;for(int i=1;i<=n;i++){for(int j=max(1,i-4);j<=i;j++){int sum=1;for(int k=j;k<=i;k++)sum*=a[k];dp[i]=max(dp[i],dp[j-1]+sum);}}printf("%d\n",dp[n]);}return 0;
}

牛客 - Gaming with Mia(dp)相关推荐

  1. 牛客 contest897 C-Latale(树上dp)

    题意 N个节点的树,每条边有条权值,问有多少个点对(U,V)(U, V)(U,V),使得UUU到VVV的距离是3的倍数. 思路 dfs1dfs1dfs1处理每个节点包含子树的dis[dis[%3 = ...

  2. 牛客 游戏(概率DP)

    B-游戏_牛客挑战赛59_牛客网 #include<bits/stdc++.h> typedef long long ll; using namespace std; const int ...

  3. 牛客网——流星雨(dp)

    链接:https://ac.nowcoder.com/acm/contest/547/D 来源:牛客网 题目描述 英仙座流星雨(学名Perseids)是以英仙座γ星附近为辐射点出现的流星雨,也称英仙座 ...

  4. 牛客 - Connie(AC自动机+dp/KMP+dp)

    题目链接:点击查看 题目大意:给出一个匹配串 sss,现在问模式串 ttt 的期望得分.其中假设匹配串在模式串中的出现次数为 xxx,那么将得到 2x2^x2x 的分数 题目分析:涉及到了期望一开始还 ...

  5. 牛客 - Shortest Common Non-Subsequence(dp+序列自动机)

    题目链接:点击查看 题目大意:根据最长公共子序列抛出一个新定义," 最短非公共子序列 ",假设给定了字符串 s1 和 s2,设 s 为 s1 和 s2 的"最短非公共子序 ...

  6. 牛客 CCA的区间 dp + 补集转移

    传送门 文章目录 题意: 思路: 题意: 思路: 首先翻转一个区间意味着可以将任意两段不相交的区间组合,所以问题变成了选两端不相交的区间,使得合并后区间和最大.那么我们就处理出来区间,让后进行转移即可 ...

  7. 牛客网专题 概率dp

    文章目录 概念: 例题 引入: 解答: Happy Running NC15532 题意: 题解: 代码: poj2096 NC106693 Collecting Bugs 题意: 题解: 代码: N ...

  8. 牛客wannafly27 C 树形dp

    Description "你,你认错人了.我真的,真的不是食人魔."–蓝魔法师 给出一棵树,求有多少种删边方案,使得删后的图每个连通块大小小于等于k,两种方案不同当且仅当存在一条边 ...

  9. [牛客练习] 深信服校园招聘c/c 软件开发H卷 Apare_xzc

    [牛客练习] 深信服校园招聘c/c 软件开发H卷 Apare 2020.9.17 牛客链接 56种 dp或者dfs #include <bits/stdc++.h> using names ...

最新文章

  1. android Mac OS X 中 VT/NX
  2. shell命令查阅端口信息_linux运维实用的42个常用命令总结
  3. Ajax:异步js和xml
  4. linux下cabal安装教程,Centos 7 安装shellcheck
  5. 16.Mac 修改主机名
  6. 谈谈Linux下动态库查找路径的问题
  7. psd 替换智能图层的的实现-个性化定制网站
  8. vue-element-admin-master 在线教育 - 【4】你用 POI,我已经用 EasyExcel 了+课程科目管理
  9. 【acwing 寒假每日一题(入门组)】day20 火星人
  10. CISC 与 RISC 对比
  11. 前端“智能”静态资源管理 - Onebox - 博客园
  12. feishu-飞书api
  13. kodu_Kodu教您的孩子直观地编程自己的视频游戏
  14. Arduino使用手指测心跳模块
  15. 微服务中API网关的作用是什么?
  16. 第一百篇博客,想谈谈大学的前端的学习历程和未来的计划
  17. 中国对世界主要经济体直接投资概况分析:对中国香港、东盟、欧盟投资流量分别是891.46亿美元、160.63亿美元、100.99亿美元[图]
  18. 《蜘蛛侠:平行宇宙》的视觉解析与滤镜实现
  19. 科技青年 | 训练机器说话20年,他勇闯阿里巴巴宝库
  20. service、servlet和WebService三者之间的关系

热门文章

  1. java不输出数字_为什么我的代码不输出(仅)数字?
  2. MySQL sql99语法—非等值连接
  3. MySQL 高级 - 索引 - 数据结构
  4. SpringSecurity 案例父工程创建
  5. 事务注解 @Transactional
  6. 消息中间件的背景分析
  7. spring cloud netflix
  8. IntelliJ IDEA导入一个已经存在的子模块
  9. http请求协议分析
  10. 使用Log4j - Java异常处理