LA 6892 The Safe Secret(矩阵连乘)
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(矩阵连乘)的更多相关文章
- Unity 捏脸整理及基于骨骼的捏脸功能实现
目前实现捏脸功能的方式主要有两种.一个是Blendshape(融合变形),一个是基于骨骼驱动的方式,通过修改骨骼矩阵(bindpose)来影响SkinMesh.这两种方式的最终原理都是在shader ...
- 用Python调用阿里云的短信接口
#!/usr/bin/env python# -*- coding:utf-8 -*-# Author:Frank import uuidimport datetimeimport hmacimpor ...
- 骨骼动画的原理及在Unity中的使用
制作骨骼动画 我们看看这几步操作后,我们得到了那些数据: 1.每个皮肤顶点的初始世界坐标. 2.每个骨骼关节顶点的初始世界坐标. 3.每个顶点被骨骼顶点的影响信息. 4.骨骼如何移动. 骨骼动画原理 ...
- python3调用阿里云短信服务
#!/usr/bin/env python#-*- coding:utf-8 -*-#Author:lzd import uuidimport datetimeimport hmacimport ba ...
- LA 3704 (矩阵快速幂 循环矩阵) Cellular Automaton
将这n个格子看做一个向量,每次操作都是一次线性组合,即vn+1 = Avn,所求答案为Akv0 A是一个n*n的矩阵,比如当n=5,d=1的时候: 不难发现,A是个循环矩阵,也就是将某一行所有元素统一 ...
- LA 6893 矩阵HASH (模板)
#include<stdio.h> #include<string.h> typedef unsigned long long ULL; ; ; int test,n,m,x, ...
- LA 6893 The Big Painting(矩阵Hash)
https://vjudge.net/problem/UVALive-6893 题意: 给出一个小矩阵和大矩阵,在大矩阵中能找到相同的小矩阵. 思路: 矩阵Hash,先对小矩阵计算出它的Hash值,然 ...
- UVA - 12183 :Top Secret(N^2的循环矩阵乘法)
pro:N个数排成一圈.一次操作为,每个位置的数+=L*左+R*右,保留x为整数. 问S轮操作后每个位置的值. N<=1000,S<=2^30,x<=9 . sol:不难想到矩阵乘法 ...
- LA 3704细胞自动机——循环矩阵&&矩阵快速幂
题目 一个细胞自动机包含 $n$ 个格子,每个格子的取值为 $0 \sim m-1$.给定距离 $d$,则每次操作是将每个格子的值变为到它的距离不超过 $d$ 的所有格子的在操作之前的值的和除以 $m ...
随机推荐
- eui.Button 上放置两张图片
有时按钮会有一个需求.放置一个按钮底图,按钮文字是特效字体,也是一张图. 1 1个普通按钮 <e:Button label="> <e:skinName> < ...
- mysql导入数据失败:mysql max_allowed_packet 设置过小
mysql根据配置文件会限制server接受的数据包大小. 有时候大的插入和更新会受max_allowed_packet 参数限制,导致写入或者更新失败. 查看目前配置 show VARIABLES ...
- 170602、防止sql注入(一)
一.SQL注入简介 SQL注入是比较常见的网络攻击方式之一,它不是利用操作系统的BUG来实现攻击,而是针对程序员编程时的疏忽,通过SQL语句,实现无帐号登录,甚至篡改数据库. 二.SQL注入攻击的总体 ...
- 沈阳网络赛G-Spare Tire【容斥】
17.64% 1000ms 131072K A sequence of integer \lbrace a_n \rbrace{an} can be expressed as: \display ...
- Monkey Tradition---LightOj1319(中国剩余定理模板)
题目链接:http://lightoj.com/volume_showproblem.php?problem=1319 题意:有 n 个猴子,n 棵树,树的高度为 L ,每个猴子刚开始的时候都在树的底 ...
- Python开发【模块】:BeautifulSoup
BeautifulSoup BeautifulSoup是一个模块,该模块用于接收一个HTML或XML字符串,然后将其进行格式化,之后遍可以使用他提供的方法进行快速查找指定元素,从而使得在HTML或XM ...
- Python开发【项目】:大型模拟战争游戏(外星人入侵)
外星人入侵 游戏概述: 现在准备用python开始搞一个大型游戏,模拟未来战争,地球人狙击外星人大战(其实就是小蜜蜂游戏2333),玩家控制一个飞船,用子弹歼灭屏幕上空的外星飞船:项目用到了Pygam ...
- python调用API
相信做过自动化运维的同学都用过API接口来完成某些动作.API是一套成熟系统所必需的接口,可以被其他系统或脚本来调用,这也是自动化运维的必修课. 本文主要介绍Python中调用API的几种方式,下面是 ...
- redhat 6.6 离线安装docker
本机环境:redhat6.6 uname -a Linux host- -.el6.x86_64 # SMP Tue Sep :: EDT x86_64 x86_64 x86_64 GNU/Linux ...
- MongDb的安装
MongoDB是一个基于分布式文件存储的数据库,由c++语言编写,为WEB应用提供可扩展的高性能数据存储解决方案.MongoDB属于非关系数据库,也不能说完全属于,更像是介于关系数据库和非关系数据库之 ...