P4342 [IOI1998]Polygon

P4342 [IOI1998]Polygon

题意:

给你一个n个点的环,第一步,删除其中一条边。随后每一步:
选择一条边连接的两个顶点V1和V2,用边上的运算符计算V1和V2得到的结果来替换这两个顶点。
游戏结束时,只有一个顶点,没有多余的边。
编写一个程序,给定一个多边形,计算最高可能的分数

题解:

在枚举第一步删除哪条边后,剩下的问题就和石头合并很相近了,仍然是在第一步中队两个相邻的元素做某种运算合成一个。我们把被删除的边逆时针方向顶点称为”第一个顶点“。可以得到F[l][r]:表示把第l到第r个顶点合成一个顶点后,顶点上的数值最大是多少
我们注意到题目所给的运算有+和*,对于乘法,有时并不是两个最大数相乘就得到最大值,有可能两个负值乘起来更大,所以我们还需要考虑最小值的情况。因此我们再加一维状态F[l][r][0/1],分别表示表示把第l到第r个顶点合成一个顶点后,顶点上的数值最大是多少,最小值是多少。对于乘法,把各种情况都考虑一边,取最大(最小)。对于加法,不用考虑其他,直接加起来就行

代码:

// Problem: P4342 [IOI1998]Polygon
// Contest: Luogu
// URL: https://www.luogu.com.cn/problem/P4342
// Memory Limit: 128 MB
// Time Limit: 1000 ms
// By Jozky#include <bits/stdc++.h>
#include <unordered_map>
#define debug(a, b) printf("%s = %d\n", a, b);
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> PII;
clock_t startTime, endTime;
//Fe~Jozky
const ll INF_ll= 1e18;
const int INF_int= 0x3f3f3f3f;
void read(){};
template <typename _Tp, typename... _Tps> void read(_Tp& x, _Tps&... Ar)
{x= 0;char c= getchar();bool flag= 0;while (c < '0' || c > '9')flag|= (c == '-'), c= getchar();while (c >= '0' && c <= '9')x= (x << 3) + (x << 1) + (c ^ 48), c= getchar();if (flag)x= -x;read(Ar...);
}
template <typename T> inline void write(T x)
{if (x < 0) {x= ~(x - 1);putchar('-');}if (x > 9)write(x / 10);putchar(x % 10 + '0');
}
void rd_test()
{
#ifdef ONLINE_JUDGE
#elsestartTime= clock();freopen("data.in", "r", stdin);
#endif
}
void Time_test()
{
#ifdef ONLINE_JUDGE
#elseendTime= clock();printf("\nRun Time:%lfs\n", (double)(endTime - startTime) / CLOCKS_PER_SEC);
#endif
}
const int maxn= 190;
char a[maxn];
int b[maxn];
int f[maxn][maxn][2];
int main()
{//rd_test();int n;scanf("%d", &n);getchar();for (int i= 1; i <= 2 * n; i++) {for (int j= 1; j <= 2 * n; j++) {f[i][j][0]= -INF_int;f[i][j][1]= INF_int;}}for (int i= 1; i <= n; i++) {// getchar();scanf("%c%d", &a[i], &b[i]);a[i + n]= a[i];b[i + n]= b[i];f[i][i][0]= f[i][i][1]= b[i];f[i + n][i + n][0]= f[i + n][i + n][1]= b[i];char ch= getchar();}for (int len= 2; len <= n; len++) {for (int l= 1; l + len - 1 < 2 * n; l++) {int r= l + len - 1;for (int k= l; k < r; k++) {if (a[k + 1] == 'x') {f[l][r][0]= max(f[l][r][0], f[l][k][0] * f[k + 1][r][0]); //最大乘最大f[l][r][0]= max(f[l][r][0], f[l][k][1] * f[k + 1][r][1]); //最小乘最小f[l][r][0]= max(f[l][r][0], f[l][k][1] * f[k + 1][r][0]); //最大乘最小f[l][r][0]= max(f[l][r][0], f[l][k][0] * f[k + 1][r][1]);f[l][r][1]= min(f[l][r][1], f[l][k][1] * f[k + 1][r][1]);f[l][r][1]= min(f[l][r][1], f[l][k][0] * f[k + 1][r][0]);f[l][r][1]= min(f[l][r][1], f[l][k][1] * f[k + 1][r][0]);f[l][r][1]= min(f[l][r][1], f[l][k][0] * f[k + 1][r][1]);}else if (a[k + 1] == 't') {f[l][r][0]= max(f[l][r][0], f[l][k][0] + f[k + 1][r][0]);f[l][r][1]= min(f[l][r][1], f[l][k][1] + f[k + 1][r][1]);}}}}int maxx= 0;for (int i= 1; i <= n; i++) {maxx= max(maxx, f[i][i + n - 1][0]);}printf("%d\n", maxx);for (int i= 1; i <= n; i++) {if (f[i][i + n - 1][0] == maxx) {printf("%d ", i);}}// cout << maxx << endl;//Time_test();
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/316104.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

三元环讲解

参考文章&#xff1a; 不常用的黑科技——「三元环」 引入 给定一张无重边&#xff0c;无自环的无向图&#xff0c;点数为n&#xff0c;边数为m&#xff0c;且n&#xff0c;m同阶&#xff0c;问有多少个无序三元组(i,j,k),使得存在&#xff1a; 有一个连接i&#xff0c;j的边…

深入研究 Mini ASP.NET Core,看看 ASP.NET Core 内部到底是如何运行的

几年前&#xff0c;Artech 老师写过一个 Mini MVC&#xff0c;用简单的代码告诉读者 ASP.NET MVC 内部到底是如何运行的。当时我研究完以后&#xff0c;受益匪浅&#xff0c;内心充满了对 Artech 老师的感激&#xff0c;然后用我自己理解的 MVC 知识&#xff0c;写了一篇 深入研…

Cities(2020昆明C)

Cities(2020昆明C) 题意&#xff1a; 给定长度为n的序列a[]&#xff0c;一次操作你可以选择一个数值相同的连续区间&#xff0c;将这个区间的数值修改为其他数。 问多少进行多少次操作能使得区间所有数相同。 n<5000&#xff0c;每种a[i]最多出现15次 题解&#xff1a; …

一文读懂Asp.net core 依赖注入(Dependency injection)

一、什么是依赖注入首先在Asp.net core中是支持依赖注入软件设计模式&#xff0c;或者说依赖注入是asp.net core的核心&#xff1b;依赖注入&#xff08;DI&#xff09;和控制反转&#xff08;IOC&#xff09;基本是一个意思&#xff0c;因为说起来谁都离不开谁&#xff1b;或者…

P4619 [SDOI2018]旧试题

P4619 [SDOI2018]旧试题 题意&#xff1a; 求个式子&#xff1a; (∑i1A∑j1B∑k1Cd(i∗j∗k))mod(1097)(\sum_{i1}^{A}\sum_{j1}^{B}\sum_{k1}^{C}d(i*j*k))mod(10^97)(i1∑A​j1∑B​k1∑C​d(i∗j∗k))mod(1097) 题解&#xff1a; 原创博文1k纪念 很明显&#xff0c;莫比…

C#中使用Bogus创建模拟数据

原文&#xff1a;CREATING SAMPLE DATA FOR C#[1] 作者&#xff1a;Bruno Sonnino 译文&#xff1a;C#中使用Bogus创建模拟数据 译者&#xff1a; Lamond Lu背景在我每次写技术类博文的时候&#xff0c;经常做的一件事就是创建模拟数据。在每篇博文中&#xff0c;为了解释某些概…

CF1253E Antenna Coverage

CF1253E Antenna Coverage 题意&#xff1a; 现在有n个点&#xff0c;每个点的坐标为xi&#xff0c;以及一个范围值si&#xff0c;可以覆盖左右范围[xi-si,xisi] 每次操作&#xff0c;可以花费代价1让第i个天线的si增加1&#xff0c;每个天线都可以进行多次操作。现在请问你最…

使用BeetleX的TcpBenchmark工具进行百万设备模拟测试

其实TCP测试的工具有很多&#xff0c;那BeetleX工具所提供的特点又是什么呢&#xff1f;如果你需数十万的请求或模拟上百万的设备连接&#xff0c;那这个工具相信可以满足你的需要&#xff01;工具是基于BeetleX的基础功能扩展&#xff0c;支持多IP绑定可以轻松实现上百万的cli…

.net core Entity Framework 与 EF Core

重点讲 Entity Framework Core &#xff01;&#xff08;一&#xff09;Entity Framework它是适用于.NET 的对象关系映射程序 (ORM)&#xff0c;现在的EF6已经是久经沙场&#xff0c;并经历重重磨难&#xff0c;获得一致认可的数据访问技术&#xff08;原来加 Title 也挺有意思…

CF1253F Cheap Robot

CF1253F Cheap Robot 题意&#xff1a; 给你一张 N 个点的带权无向连通图&#xff0c;其中结点 1,2,…,k 为充电中心。 一个机器人在图中行走&#xff0c;假设机器人的电池容量为 c&#xff0c;则任何时刻&#xff0c;机器人的电量 x 都必须满足 c0≤x≤c。如果机器人沿着一…

牛客练习赛55E树

牛客练习赛55E树 题意&#xff1a; 你有一颗大小为n 的树&#xff0c;点从 1 到 n 标号。 设dis(x,y)表示 x 到 y 的距离。 求∑i1n∑j1ndis2(i,j)\sum_{i1}^{n}\sum_{j1}^{n}dis^2(i,j)∑i1n​∑j1n​dis2(i,j)对998244353取模的结果 题解&#xff1a; 我们以1为根&#x…

asp.net core 3.0 gRPC框架小试

什么是gRPCgRPC是google开源的一个高性能、跨语言的RPC框架&#xff0c;基于HTTP2协议&#xff0c;采用ProtoBuf 定义的IDL。gRPC 的主要优点是&#xff1a;现代高性能轻量级 RPC 框架。协定优先 API 开发&#xff0c;默认使用协议缓冲区&#xff0c;允许与语言无关的实现。可用…

P1131 [ZJOI2007] 时态同步

P1131 [ZJOI2007] 时态同步 题意&#xff1a; 有一颗树&#xff0c;有一个点是激发器&#xff0c;从这个点开始可以产生一个激励电流&#xff0c;通过导线传向每一个它所连接的节点&#xff0c;经过一个边的花费为w[i],你有一个道具&#xff0c;每用一次可以让一个边的花费1&…

.Net开发者必知的技术类RSS订阅指南

作为一个.Net开发者&#xff0c;在如今这个信息大爆炸时代&#xff0c;网络上.net开发方面的信息浩如烟海(获取信息的渠道很多&#xff0c;比如各种 APP、公众号、聚合信息网站、博客园、InfoQ等等)&#xff0c;如何用有限的时间来获取并消化有效信息显得格外重要。虽然我们获取…

又一最大子段和

又一最大子段和&#xff08;牛客小白月赛38 &#xff09; 题意&#xff1a; 我们将一个数列{an}的最大字段和的值记为S(a),现在你可以对进行若干次操作&#xff0c;每次操作&#xff0c;你可以选择数列中的一个数字&#xff0c;将其改为[−10100,10100][-10^{100},10^{100}][…

我的微服务观,surging 2.0将会带来多大的改变

Surging 自2017年6月16日开源以来&#xff0c;已收到不少公司的关注或者使用&#xff0c;其中既有以海克斯康超大型等外企的关注&#xff0c;也不乏深圳泓达康、重庆金翅膀等传统行业的正式使用&#xff0c;自2019年年初&#xff0c;surging2.0 便已正式进入研发阶段&#xff0…

B Convex Polygon

B Convex Polygon 题意&#xff1a; 有n个点&#xff0c;每两个点组成一个坐标&#xff0c;现在问你是否所有的点可以构成一个凸多边形。并且这些点应该以顺时针方向输出。 题解&#xff1a; 很明显裸的凸包板子题&#xff0c;但是我们队里没人负责计算几何&#xff0c;当时…

corefx 源码学习:SqlClient 是如何同步建立 Socket 连接的

在昨天的技术周会上发现 EnyimMemcached 中建立 Socket 连接的代码有问题&#xff0c;今天坐车的时候在手机上阅读 .net core 2.2 的 SqlClient 中同步建立 Socket 连接的代码 SNITcpHandle.cs#L180 学习了一下。建立 Socket 连接需要处理2个问题&#xff1a;1&#xff09;处理…

CF1245D Shichikuji and Power Grid

CF1245D Shichikuji and Power Grid 题意&#xff1a; 已知一个平面上有 n 个城市&#xff0c;需要个 n 个城市均通上电 一个城市有电&#xff0c;必须在这个城市有发电站或者和一个有电的城市用电缆相连 在一个城市建造发电站的代价是 c[i] i 和 j两个城市相连的代价是 k[…

NetCore + SignalR 实现日志消息推送

哈喽大家周一好呀&#xff0c;感觉好久没有写文章了&#xff0c;上周出差了一次&#xff0c;感觉还是比坐办公室好的多&#xff0c;平时在读一本书《时生》&#xff0c;感兴趣的可以看看?......这几天翻看 NetCore 相关知识扩展的时候&#xff0c;发现了久违的一个知识点 ——…