题目传送门

解题思路:

一道环形dp,只不过有个地方要注意,因为有乘法,两个负数相乘是正数,所以最小的数是负数,乘起来可能比最大值大,所以要记录最小值(这道题是紫题的原因).

AC代码:

 #include<cstdio>
#include<iostream>
#include<cstring> using namespace std; int n,a[],maxf[][],minf[][],ans = -;
char c[]; int main()
{
scanf("%d",&n);
for(int i = ;i <= n; i++) {
cin >> c[i] >> a[i];//char和string最好用cin,因为用了scanf调了好长时间
a[i+n] = a[i];
c[i+n] = c[i];
}
memset(minf,0x80,sizeof(minf));//最小值
memset(maxf,0x3f,sizeof(maxf));//最大值
for(int i = ;i <= n + n - ; i++) {
maxf[i][i] = a[i];
minf[i][i] = a[i];
}
for(int p = ;p <= n; p++)
for(int i = ;i + p - <= n + n - ; i++){
int j = i + p - ;
for(int k = i + ;k <= j; k++)
if(c[k] == 'x') {//如果是乘
minf[i][j] = max(minf[i][j],max(minf[i][k-] * minf[k][j],max(maxf[i][k-] * minf[k][j],max(minf[i][k-] * maxf[k][j],maxf[i][k-] * maxf[k][j]))));
maxf[i][j] = min(maxf[i][j],min(minf[i][k-] * minf[k][j],min(maxf[i][k-] * minf[k][j],min(minf[i][k-] * maxf[k][j],maxf[i][k-] * maxf[k][j]))));
}
else {
minf[i][j] = max(minf[i][j],minf[i][k-] + minf[k][j]);
maxf[i][j] = min(maxf[i][j],maxf[i][k-] + maxf[k][j]);
}
}
for(int i = ;i <= n; i++)
ans = max(ans,minf[i][i+n-]);
printf("%d\n",ans);
for(int i = ;i <= n; i++)
if(minf[i][i+n-] == ans)
printf("%d ",i);
return ;
}

洛谷 P4342 [IOI1998]Polygon的更多相关文章

  1. 【洛谷P4342】[IOI1998]Polygon

    Polygon 比较裸的环形DP(也可以说是区间DP) 将环拆成链,复制到后面,做区间DP即可 #include<iostream> #include<cstdio> usin ...

  2. 【洛谷 P4342】[IOI1998]Polygon(DP)

    题目链接 题意不再赘述. 这题和合并石子很类似,但是多了个乘法,而乘法是不满足"大大得大"的,因为两个非常小的负数乘起来也会很大,一个负数乘一个很大的整数会很小,所以我们需要添加一 ...

  3. P4342 [IOI1998]Polygon

    题意翻译 题目可能有些许修改,但大意一致 多边形是一个玩家在一个有n个顶点的多边形上的游戏,如图所示,其中n=4.每个顶点用整数标记,每个边用符号+(加)或符号*(乘积)标记. 第一步,删除其中一条边 ...

  4. luogu P4342 [IOI1998]Polygon

    IOI早期这么多dp? 题目要求断掉环上的一边,我们可以断环为链,开两倍数组 容易想到dp,设\(f_{i,j}\)为区间\([i,j]\)的最大值,然后就是个枚举断点的区间dp 不过可能会有负数出现 ...

  5. 洛谷 P1856 【Picture】

    题目描述 N(N<5000) 张矩形的海报,照片和其他同样形状的图片贴在墙上.它们的边都是垂直的或水平的.每个矩形可以部分或者全部覆盖其他矩形.所有的矩形组成的集合的轮廓称为周长.写一个程序计算 ...

  6. 洛谷 P3187 BZOJ 1185 [HNOI2007]最小矩形覆盖 (旋转卡壳)

    题目链接: 洛谷 P3187 [HNOI2007]最小矩形覆盖 BZOJ 1185: [HNOI2007]最小矩形覆盖 Description 给定一些点的坐标,要求求能够覆盖所有点的最小面积的矩形, ...

  7. 洛谷1640 bzoj1854游戏 匈牙利就是又短又快

    bzoj炸了,靠离线版题目做了两道(过过样例什么的还是轻松的)但是交不了,正巧洛谷有个"大牛分站",就转回洛谷做题了 水题先行,一道傻逼匈牙利 其实本来的思路是搜索然后发现写出来类 ...

  8. 洛谷P1352 codevs1380 没有上司的舞会——S.B.S.

    没有上司的舞会  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond       题目描述 Description Ural大学有N个职员,编号为1~N.他们有 ...

  9. 洛谷P1108 低价购买[DP | LIS方案数]

    题目描述 “低价购买”这条建议是在奶牛股票市场取得成功的一半规则.要想被认为是伟大的投资者,你必须遵循以下的问题建议:“低价购买:再低价购买”.每次你购买一支股票,你必须用低于你上次购买它的价格购买它 ...

随机推荐

  1. P1083 是否存在相等的差

    P1083 是否存在相等的差 转跳点:

  2. P 1041 考试座位号

    P 1041 考试座位号 转跳点:

  3. mybatis关于级联查询结果集嵌套映射对象非列表的处理问题

    工作中遇到这么一个问题,嵌套查询,返回json的时候,作为属性,deviceFields是一个device中的一个对象属性,在json返回的时候想要得到的应该是deviceFields:{ 具体属性} ...

  4. 二十、SAP中定义内表

    一.内表相当于传统语言的多维数组的东西,定义一个内表有以下2个方式

  5. 【机器学习实战笔记(3-2)】朴素贝叶斯法及应用的python实现

    文章目录 1.朴素贝叶斯法的Python实现 1.1 准备数据:从文本中构建词向量 1.2 训练算法:从词向量计算概率 1.3 测试算法:根据现实情况修改分类器 1.4 准备数据:文档词袋模型 2.示 ...

  6. Web安全常见问题及解决方法

    关于Web安全,我们最早听到最多的就是SQL注入.例如用户在系统登录界面输入用户名和密码,提交以后,后端直接拿到数据就拼接SQL语句去查询数据库.如果在输入时进行了恶意的SQL拼装,那么最后生成的SQ ...

  7. Java文件处理之IO流

    一.概述 流:代表任何有能力产出数据的数据源对象或者是有能力接受数据的接收端对象 :其作用是为数据源和目的地建立一个输送通道. IO流:是程序中一套用于数据传输的机制.IO流是Input流和Outpu ...

  8. 利用标签导出Word文档

    1 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; us ...

  9. POJ-3984 迷宫问题(BFS找最短路径并保存)

    问题: 定义一个二维数组:  int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, ...

  10. POJ 3295:Tautology

    Tautology Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10482   Accepted: 3982 Descri ...