多边形游戏 /// 区间DP oj1903
题目大意:
...
输入的第一行是单独一个整数n( 3 ≤ n ≤ 18 ),表示多边形的顶点数(同时也是边数)。
接下来第n行,每行包含一个运算符("+"或"*")和一个整数V[i]( -10 < V[i] < 10 ),分别表示第i条边所对应的运算符和第i个顶点上的数值。
输出只有一个整数,表示最高得分W ( -231 < W < 231 )。
3
+ 2
* 3
+ 1
9
#include <bits/stdc++.h>
#define INF 0x3f3f3f3f
#define ll long long
using namespace std;
char e[];
ll d[],dp0[][],dp1[][];
/// 存在负数的情况 乘法时负负得正 所有要同时维护最大值和最小值
int main()
{
int n; scanf("%d\n",&n);
for(int i=;i<n;i++)
{
cin>>e[(i+n-)%n]>>d[i];
dp0[i][]=dp1[i][]=d[i];
}
/// 默认删除 选择的起点的前一条边
for(int r=;r<=n;r++)
for(int i=;i<n;i++)
{
dp0[i][r]=INF, dp1[i][r]=-INF;
for(int k=;k<r;k++)
{
ll a=dp0[i][k], b=dp0[(i+k)%n][r-k],
c=dp1[i][k], d=dp1[(i+k)%n][r-k];
/// 注意由于是环形 这两处必须取模
if(e[(i+k-)%n]=='*')
{
ll tmp[]={a*b,a*d,c*b,c*d};
sort(tmp,tmp+);
dp0[i][r]=min(dp0[i][r],tmp[]),
dp1[i][r]=max(dp1[i][r],tmp[]);
}
else
{
dp0[i][r]=min(dp0[i][r],a+b);
dp1[i][r]=max(dp1[i][r],c+d);
}
}
}
ll ans=;
for(int i=;i<n;i++)
ans=max(ans,dp1[i][n]);
printf("%lld\n",ans); return ;
}
多边形游戏 /// 区间DP oj1903的更多相关文章
- 多边形游戏——区间dp
题目描述 多边形(Polygon)游戏是单人玩的游戏,开始的时候给定一个由N个顶点构成的多边形(图1所示的例子中,N=4),每个顶点被赋予一个整数值,而每条边则被赋予一个符号:+(加法运算)或者*(乘 ...
- Vijos 1565 多边形 【区间DP】
描述 zgx给了你一个n边的多边形,这个多边形每个顶点赋予一个值,每条边都被标上运算符号+或*,对于这个多边形有一个游戏,游戏的步骤如下:(1)第一步,删掉一条边:(2)接下来n-1步,每步对剩下的边 ...
- P1005 矩阵取数游戏[区间dp]
题目描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的\(m*n\)的矩阵,矩阵中的每个元素\(a_{i,j}\)均为非负整数.游戏规则如下: 每次取数时须从每行各取走一个元素,共n个.经过m次后 ...
- 圆桌游戏(区间DP)
2.圆桌游戏 (game.cpp/c/pas) [问题描述] 有一种圆桌游戏是这样进行的:n个人围着圆桌坐成一圈,按顺时针顺序依次标号为1号至n号.对1<=i<=n的i来说,i号的左边是i ...
- BZOJ 2121: 字符串游戏 区间DP + 思维
Description BX正在进行一个字符串游戏,他手上有一个字符串L,以及其他一些字符串的集合S,然后他可以进行以下操作:对 于一个在集合S中的字符串p,如果p在L中出现,BX就可以选择是否将其删 ...
- 洛谷 P1043 数字游戏 区间DP
题目描述 丁丁最近沉迷于一个数字游戏之中.这个游戏看似简单,但丁丁在研究了许多天之后却发觉原来在简单的规则下想要赢得这个游戏并不那么容易.游戏是这样的,在你面前有一圈整数(一共n个),你要按顺序将其分 ...
- qscoj 喵哈哈村的打印机游戏 区间dp
点这里去看题 区间dp ,dp[l][r][d]代表从l到r的区间底色为d,具体看代码 第一次见到区间dp...两个小时对着敲了五遍终于自己敲懂了一遍ac #include<bits/stdc+ ...
- 多边形游戏(DP)
Description 多边形游戏是一个单人玩的游戏,开始时有一个由n个顶点构成的多边形.每个顶点被赋予一个整数值,每条边被赋予一个运算符 "+" 或 "*". ...
- 【bzoj2121】字符串游戏 区间dp
题目描述 给你一个字符串L和一个字符串集合S,如果S的某个子串在S集合中,那么可以将其删去,剩余的部分拼到一起成为新的L串.问:最后剩下的串长度的最小值. 输入 输入的第一行包含一个字符串,表示L. ...
随机推荐
- 阿里云POLARDB如何帮助百胜软件应对数据库的“巅峰时刻”
POLARDB是阿里云自研的下一代关系型云数据库,100%兼容MySQL,存储容量最高可达100TB,性能最高提升至MySQL的6倍,适用于企业多样化的数据库应用场景.POLARDB采用存储和计算分离 ...
- 字符串hash+回文树——hdu6599
拖了很久才补的回文树,感觉网上的博客都是一个做法..回文树统计不同种类的回文串出现次数,然后用字符串hash来判每个回文子串是否符合要求 #include<bits/stdc++.h> u ...
- Python爬虫-《神雕侠侣》
Python3.5 爬取<神雕侠侣>http://www.kanunu8.com/wuxia/201102/1610.html 武侠迷,所以喜欢爬取武侠小说 #!/usr/bin/pyth ...
- topjui.core.js
var defaultConfig = { pageLoadComplete: false, config: { ctx: "", mainPage: false, pkName: ...
- Soldier and Number Game-素数筛
Two soldiers are playing a game. At the beginning first of them chooses a positive integer n and giv ...
- Codeforces 166B - Polygon (判断凸包位置关系)
Codeforces Round #113 (Div. 2) 题目链接:Polygons You've got another geometrical task. You are given two ...
- [kuangbin带你飞]专题一 简单搜索 - M - 非常可乐
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #i ...
- 随笔-ansible-3
关于循环的一些事: 是否是因为模块的原因? item适用于copy,但不适用于yum.虽然出现了警告,但并不表示不能用.功能还是不受影响的. 在上例中,我们使用了yum.copy.service模块( ...
- kafka 扩展partition和replication-factor
问题: 1. kafka的topic 是程序自己建立,默认只建立8个partitions,1个replication-factor 目的: 扩展partitions 到9个, replicatoion ...
- C#利用资源文件设置软件自适应多语言
在项目更目录下添加两个资源文件,以适应中英文两种版本,如Resource.zh_CN.resx和 Resource.en-US.resx ,两个资源文件的ID都一样,值分别配置相应的中英文 ...