牛客 - Gaming with Mia(dp)
题目链接:点击查看
题目大意:给出一个长度为 n 的序列,每个元素只由 -1 , 0 , 1 组成,现在要求在相邻两个元素之间添加一个符号,共添加 n - 1 个符号,符号可以选择加号或乘号,问如何选择能使得结果最大
题目分析:第一反应想到用栈模拟,为了让总结果最大,对于 1 来说肯定加上最优,对于 0 来说,肯定是用于抵消 -1 最优,对于 -1 来说,肯定是与 -1 相乘生成 1 最优,但是有下列两种情况比较特殊:
- -1 1 -1
- -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)相关推荐
- 牛客 contest897 C-Latale(树上dp)
题意 N个节点的树,每条边有条权值,问有多少个点对(U,V)(U, V)(U,V),使得UUU到VVV的距离是3的倍数. 思路 dfs1dfs1dfs1处理每个节点包含子树的dis[dis[%3 = ...
- 牛客 游戏(概率DP)
B-游戏_牛客挑战赛59_牛客网 #include<bits/stdc++.h> typedef long long ll; using namespace std; const int ...
- 牛客网——流星雨(dp)
链接:https://ac.nowcoder.com/acm/contest/547/D 来源:牛客网 题目描述 英仙座流星雨(学名Perseids)是以英仙座γ星附近为辐射点出现的流星雨,也称英仙座 ...
- 牛客 - Connie(AC自动机+dp/KMP+dp)
题目链接:点击查看 题目大意:给出一个匹配串 sss,现在问模式串 ttt 的期望得分.其中假设匹配串在模式串中的出现次数为 xxx,那么将得到 2x2^x2x 的分数 题目分析:涉及到了期望一开始还 ...
- 牛客 - Shortest Common Non-Subsequence(dp+序列自动机)
题目链接:点击查看 题目大意:根据最长公共子序列抛出一个新定义," 最短非公共子序列 ",假设给定了字符串 s1 和 s2,设 s 为 s1 和 s2 的"最短非公共子序 ...
- 牛客 CCA的区间 dp + 补集转移
传送门 文章目录 题意: 思路: 题意: 思路: 首先翻转一个区间意味着可以将任意两段不相交的区间组合,所以问题变成了选两端不相交的区间,使得合并后区间和最大.那么我们就处理出来区间,让后进行转移即可 ...
- 牛客网专题 概率dp
文章目录 概念: 例题 引入: 解答: Happy Running NC15532 题意: 题解: 代码: poj2096 NC106693 Collecting Bugs 题意: 题解: 代码: N ...
- 牛客wannafly27 C 树形dp
Description "你,你认错人了.我真的,真的不是食人魔."–蓝魔法师 给出一棵树,求有多少种删边方案,使得删后的图每个连通块大小小于等于k,两种方案不同当且仅当存在一条边 ...
- [牛客练习] 深信服校园招聘c/c 软件开发H卷 Apare_xzc
[牛客练习] 深信服校园招聘c/c 软件开发H卷 Apare 2020.9.17 牛客链接 56种 dp或者dfs #include <bits/stdc++.h> using names ...
最新文章
- android Mac OS X 中 VT/NX
- shell命令查阅端口信息_linux运维实用的42个常用命令总结
- Ajax:异步js和xml
- linux下cabal安装教程,Centos 7 安装shellcheck
- 16.Mac 修改主机名
- 谈谈Linux下动态库查找路径的问题
- psd 替换智能图层的的实现-个性化定制网站
- vue-element-admin-master 在线教育 - 【4】你用 POI,我已经用 EasyExcel 了+课程科目管理
- 【acwing 寒假每日一题(入门组)】day20 火星人
- CISC 与 RISC 对比
- 前端“智能”静态资源管理 - Onebox - 博客园
- feishu-飞书api
- kodu_Kodu教您的孩子直观地编程自己的视频游戏
- Arduino使用手指测心跳模块
- 微服务中API网关的作用是什么?
- 第一百篇博客,想谈谈大学的前端的学习历程和未来的计划
- 中国对世界主要经济体直接投资概况分析:对中国香港、东盟、欧盟投资流量分别是891.46亿美元、160.63亿美元、100.99亿美元[图]
- 《蜘蛛侠:平行宇宙》的视觉解析与滤镜实现
- 科技青年 | 训练机器说话20年,他勇闯阿里巴巴宝库
- service、servlet和WebService三者之间的关系