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 ...
随机推荐
- android 点九工具介绍
1=============================9.png简介:“点九”是andriod平台的应用软件开发里的一种特殊的图片形式,文件扩展名为:.9.png android平台有多种不同的 ...
- OC开发_Storyboard——Core Data
一 .NSManagedObjectContext 1.我们要想操作Core Data,首先需要一个NSManagedObjectContext2.那我们如何获得Context呢:创建一个UIMana ...
- 素数测试算法(基于Miller-Rabin的MC算法) // Fermat素数测试法
在以往判断一个数n是不是素数时,我们都是采用i从2到sqrt(n)能否整除n.如果能整除,则n是合数;否则是素数.但是该算法的时间复杂度为O(sqrt(n)),当n较大时,时间性能很差,特别是在网络安 ...
- C++,一些常用的知识点
用typedef定义数组.指针.结构等类型将带来很大的方便,不仅使程序书写简单而且使意义更为明确,因而增强了可读 性. C++中是用关键字typedef定义一个标识符来代表一种数据类型,该标识符可以象 ...
- poj3974 Palindrome【回文】【Hash】【二分】
Palindrome Time Limit: 15000MS Memory Limit: 65536K Total Submissions: 13157 Accepted: 5028 Desc ...
- ubuntu16.04下安装pcl点云库
安装依赖项 sudo apt-get update sudo apt-get install git build-essential linux-libc-dev sudo apt-get insta ...
- Django权限系统auth模块详解
转自:原文出处 auth模块是Django提供的标准权限管理系统,可以提供用户身份认证, 用户组和权限管理. auth可以和admin模块配合使用, 快速建立网站的管理系统. 在INSTALLED_A ...
- EA类图与代码同步
画了一段时间的图,愈发感觉到EA是一个强大的软件,而不不过一个绘图工具那么简单. . 随着学习时间的延长.如今写程序并不能像曾经一样随心所欲,想到什么就敲什么了,而是要先绘图(也就是理需求和思路的过程 ...
- 使用递归打印二叉树的左视图 java
使用递归打印二叉树的左视图 java package com.li.jinRiTouTiao; public class PrintLeftView { static class TreeNode{ ...
- Elasticsearch查询规则(一)match和term
es种有两种查询模式,一种是像传递URL参数一样去传递查询语句,被称为简单搜索或查询字符串(query string)搜索,比如 GET /megacorp/employee/_search //查询 ...