https://vjudge.net/problem/UVALive-6892

题意:

给出n个数字和n个符号(+,-,*和?),?可以为+,-,*中任意一个,现在要计算出这个式子的最小值和最大值,并且运算顺序随意,也就是可以随便加括号。之后进行旋转之后继续计算。比如一开始给的是1 ? 5 + 0 ? -2 - -3 *,那么旋转之后就是上面的第二行了,这样一共需要旋转n次,也就是说要计算n次。

思路:
运算顺序随意,有没有感觉很像矩阵连乘?

这道题目就是升级版的矩阵连乘吧。

因为是可以旋转的,那么就在后面再加一行变成线性。

之后就和矩阵连乘的做法差不多了,用两个数组来保存,一个保存最大值,另一个最小值即可。

 #include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<sstream>
#include<vector>
#include<stack>
#include<queue>
#include<cmath>
#include<map>
using namespace std;
typedef long long ll;
typedef pair<int,long long> pll;
const ll INF = 1LL<<;
const int maxn=+; int n;
ll f[maxn][maxn];
ll g[maxn][maxn];
char op[maxn]; int main()
{
//freopen("input.txt","r",stdin);
while(~scanf("%d",&n))
{
for(int i=;i<=*n;i++)
for(int j=;j<=*n;j++)
{
f[i][j]=-INF;
g[i][j]=INF;
} for(int i=;i<=n;i++)
{
scanf("%lld %c",&f[i][i],&op[i]);
f[n+i][n+i]=f[i][i];
g[i][i]=g[n+i][n+i]=f[i][i];
op[n+i]=op[i];
} for(int r=;r<=n;r++)
{
for(int i=;i<=*n-r+;i++)
{
int j=i+r-;
for(int k=i;k<j;k++)
{
if(op[k]=='+'||op[k]=='?')
{
f[i][j]=max(f[i][j],f[i][k]+f[k+][j]);
g[i][j]=min(g[i][j],g[i][k]+g[k+][j]);
} if(op[k]=='-'||op[k]=='?')
{
f[i][j]=max(f[i][j],f[i][k]-g[k+][j]);
g[i][j]=min(g[i][j],g[i][k]-f[k+][j]);
} if(op[k]=='*'||op[k]=='?')
{
f[i][j]=max(f[i][j],f[i][k]*f[k+][j]);
f[i][j]=max(f[i][j],g[i][k]*g[k+][j]);
f[i][j]=max(f[i][j],f[i][k]*g[k+][j]);
f[i][j]=max(f[i][j],g[i][k]*f[k+][j]); g[i][j]=min(g[i][j],f[i][k]*f[k+][j]);
g[i][j]=min(g[i][j],g[i][k]*g[k+][j]);
g[i][j]=min(g[i][j],f[i][k]*g[k+][j]);
g[i][j]=min(g[i][j],g[i][k]*f[k+][j]);
}
}
}
}
for(int i=;i<=n;i++)
{
printf("%lld%lld",abs(g[i][i+n-]),abs(f[i][i+n-]));
}
printf("\n");
}
return ;
}

LA 6892 The Safe Secret(矩阵连乘)的更多相关文章

  1. Unity 捏脸整理及基于骨骼的捏脸功能实现

    目前实现捏脸功能的方式主要有两种.一个是Blendshape(融合变形),一个是基于骨骼驱动的方式,通过修改骨骼矩阵(bindpose)来影响SkinMesh.这两种方式的最终原理都是在shader ...

  2. 用Python调用阿里云的短信接口

    #!/usr/bin/env python# -*- coding:utf-8 -*-# Author:Frank import uuidimport datetimeimport hmacimpor ...

  3. 骨骼动画的原理及在Unity中的使用

    制作骨骼动画 我们看看这几步操作后,我们得到了那些数据: 1.每个皮肤顶点的初始世界坐标. 2.每个骨骼关节顶点的初始世界坐标. 3.每个顶点被骨骼顶点的影响信息. 4.骨骼如何移动. 骨骼动画原理 ...

  4. python3调用阿里云短信服务

    #!/usr/bin/env python#-*- coding:utf-8 -*-#Author:lzd import uuidimport datetimeimport hmacimport ba ...

  5. LA 3704 (矩阵快速幂 循环矩阵) Cellular Automaton

    将这n个格子看做一个向量,每次操作都是一次线性组合,即vn+1 = Avn,所求答案为Akv0 A是一个n*n的矩阵,比如当n=5,d=1的时候: 不难发现,A是个循环矩阵,也就是将某一行所有元素统一 ...

  6. LA 6893 矩阵HASH (模板)

    #include<stdio.h> #include<string.h> typedef unsigned long long ULL; ; ; int test,n,m,x, ...

  7. LA 6893 The Big Painting(矩阵Hash)

    https://vjudge.net/problem/UVALive-6893 题意: 给出一个小矩阵和大矩阵,在大矩阵中能找到相同的小矩阵. 思路: 矩阵Hash,先对小矩阵计算出它的Hash值,然 ...

  8. UVA - 12183 :Top Secret(N^2的循环矩阵乘法)

    pro:N个数排成一圈.一次操作为,每个位置的数+=L*左+R*右,保留x为整数. 问S轮操作后每个位置的值. N<=1000,S<=2^30,x<=9 . sol:不难想到矩阵乘法 ...

  9. LA 3704细胞自动机——循环矩阵&&矩阵快速幂

    题目 一个细胞自动机包含 $n$ 个格子,每个格子的取值为 $0 \sim m-1$.给定距离 $d$,则每次操作是将每个格子的值变为到它的距离不超过 $d$ 的所有格子的在操作之前的值的和除以 $m ...

随机推荐

  1. INSERT高级应用

    INSERT INTO departments VALUES (departments_seq.nextval, 'Entertainment', 162, 1400); INSERT INTO em ...

  2. etc/fstab

    etc/fstab 就是在开机引导的时候自动挂载到linux的文件系统 设备名称 挂载点 分区的类型 挂载选项 dump选项 fsck选项UUID=ce25cdc7-434f-420b-b3 / ex ...

  3. tarjan算法求缩点+树形DP求直径

    hdu4612 Warm up Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others) ...

  4. Linux系列-Xshell连接本地VMware安装的Linux虚拟机

    一.安装VMwareWorkstation并安装RedHat虚拟机,这里安装步骤省略,网络的资料很多,大侠们不如百度或者谷歌一下,大把的资料. 二.打开本地电脑的“网络连接”,你会发现多出了2个网络适 ...

  5. Oracle性能优化之 Oracle里的优化器

    优化器(optimizer)是oracle数据库内置的一个核心子系统.优化器的目的是按照一定的判断原则来得到它认为的目标SQL在当前的情形下的最高效的执行路径,也就是为了得到目标SQL的最佳执行计划. ...

  6. BBS - 文章详细页、点赞、踩灭

    一.文章详细页 文章详细页:1.链接:<div><h5><a href="/blog/{{ article.user.username }}/articles/ ...

  7. 10行代码搞定移动web端自定义tap事件

    发发牢骚 移动web端里摸爬滚打这么久踩了不少坑,有一定移动web端经验的同学一定被click困扰过.我也不列外.一路走来被虐的不行,fastclick.touchend.iscroll什么的都用过, ...

  8. EOS token 代币兑换的资料

    eos token 兑换价格预估查询:   https://eosscan.io/ https://steemit.com/eos/@sandwich/how-to-check-which-eos-p ...

  9. Hive重写表数据丢失风险记录

    若在Hive中执行INSERT OVERWRITE重写同一个表的数据时,有可能会造成数据丢失. 如 INSERT OVERWRITE TABLE table_name SELECT * FROM ta ...

  10. 29张截图-全新安装CentOS7.5-超详细!

    目录 全新安装CentOS7.5 配置虚拟机 调整网卡名称 配置时区,分区,关闭安全工具 配置网络参数 配置root账户密码 参考链接 全新安装CentOS7.5 可以到这里下载镜像https://m ...