283. 多边形,《算法竞赛进阶指南》,

news/2024/7/24 10:56:44 标签: 算法

283. 多边形 - AcWing题库

“多边形游戏”是一款单人益智游戏。

游戏开始时,给定玩家一个具有 N 个顶点 N 条边(编号 1∼N)的多边形,如图 1 所示,其中 N=4

每个顶点上写有一个整数,每个边上标有一个运算符 +(加号)或运算符 *(乘号)。

1179_1.jpg

第一步,玩家选择一条边,将它删除。

接下来在进行 N−1 步,在每一步中,玩家选择一条边,把这条边以及该边连接的两个顶点用一个新的顶点代替,新顶点上的整数值等于删去的两个顶点上的数按照删去的边上标有的符号进行计算得到的结果。

下面是用图 1 给出的四边形进行游戏的全过程。

1179_2.jpg

最终,游戏仅剩一个顶点,顶点上的数值就是玩家的得分,上图玩家得分为 0。

请计算对于给定的 N 边形,玩家最高能获得多少分,以及第一步有哪些策略可以使玩家获得最高得分。

输入格式

输入包含两行,第一行为整数 N。

第二行用来描述多边形所有边上的符号以及所有顶点上的整数,从编号为 1 的边开始,边、点、边…按顺序描述。

其中描述顶点即为输入顶点上的整数,描述边即为输入边上的符号,其中加号用 t 表示,乘号用 x 表示。

输出格式

输出包含两行,第一行输出最高分数。

在第二行,将满足得到最高分数的情况下,所有的可以在第一步删除的边的编号从小到大输出,数据之间用空格隔开。

数据范围

3≤N≤50
数据保证无论玩家如何操作,顶点上的数值均在 [−32768,32767]之内。

输入样例:
4
t -7 t 4 x 2 x 5
输出样例:
33
1 2

解析:
简单题,注意细节

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<string>
#include<cstring>
#include<cmath>
#include<ctime>
#include<algorithm>
#include<utility>
#include<stack>
#include<queue>
#include<vector>
#include<set>
#include<map>
using namespace std;
typedef long long LL;
const int N = 110,INF=1e8;
int n;
char c[N];
int a[N];
int f[N][N], g[N][N];

int main() {
	cin >> n;
	for (int i = 1; i <= n; i++) {
		cin >> c[i] >> a[i];
		a[i + n] = a[i];
		c[i + n] = c[i];
	}
	for (int len = 1; len <= n; len++) {
		for (int i = 1; i + len - 1 <= 2 * n; i++) {
			int j = i + len - 1;
			if (len == 1) {
				f[i][j] = a[i];
				g[i][j] = a[i];
			}
			else {
				
				f[i][j] = -INF, g[i][j] = INF;
				for (int k = i; k < j; k++) {
					int minl = g[i][k], minr = g[k + 1][j], maxl = f[i][k], maxr = f[k + 1][j];
					if (c[k + 1] == 't') {
						f[i][j] = max(f[i][j], maxl+maxr);
						g[i][j] = min(g[i][j], minl + minr);
					}
					else {
						
						int x1 = minl * minr, x2 = minl * maxr, x3 = maxl * minr, x4 = maxl * maxr;
						f[i][j] = max(f[i][j], max(max(x1, x2), max(x3, x4)));
						g[i][j] = min(g[i][j], min(min(x1, x2), min(x3, x4)));
					}
				}
			}
		}
	}
	int ans = -INF;
	for (int i = 1; i <= n; i++) {
		ans = max(ans, f[i][i + n - 1]);
	}
	cout << ans << endl;
	for (int i = 1; i <= n; i++) {
		if (ans == f[i][i + n - 1]) {
			cout << i << " ";
		}
	}
	cout << endl;
	return 0;
}


http://www.niftyadmin.cn/n/5061234.html

相关文章

Spring的注解开发-Spring配置类的开发

Bean配置类的注解开发 Component等注解替代了<bean>标签&#xff0c;但像<import>、<context:componentScan>等非<bean>标签怎样去使用注解去替代呢&#xff1f;定义一个配置类替代原有的xml配置文件&#xff0c;<bean>标签以外的标签&#xff…

Spark性能监测+集群配置

spark-dashboard 参考链接 架构图 Spark官网中提供了一系列的接口可以查看任务运行时的各种指标 运行 卸载docker https://blog.csdn.net/wangerrong/article/details/126750198 sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest…

PHP各种老版本下载方式

最近因工作需要&#xff0c;要下载PHP7.3的最新版本版本。 PHP官网上提供了各种老版本下载地址&#xff1a; https://windows.php.net/downloads/releases/archives/ 下载速度不稳定&#xff0c;时快时慢。 使用前&#xff0c;给下载留足时间。 貌似晚上速度快一些。

JSP学习笔记【三】——JQuery

前言 在写项目的时候需要动态对某组件的属性进行调整&#xff0c;我看网上的教程都是使用document.getElementById等&#xff0c;但我在eclipse编写.jsp文件的时候&#xff0c;却提示document cannot be resolved。由于我对jsp没有系统的了解以及无人可咨询&#xff0c;网上也…

HTTP请求交互基础(基于GPT3.5,持续更新)

HTTP交互基础 目的HTTP定义详解HTTP协议&#xff08;规范&#xff09;1. 主要组成部分1.1 请求行&#xff08;Request Line&#xff09;&#xff1a;包含请求方法、请求URI&#xff08;Uniform Resource Identifier&#xff09;和HTTP协议版本。1.2 请求头部&#xff08;Reques…

【洛谷 P1996】约瑟夫问题 题解(队列+循环)

约瑟夫问题 题目描述 n n n 个人围成一圈&#xff0c;从第一个人开始报数,数到 m m m 的人出列&#xff0c;再由下一个人重新从 1 1 1 开始报数&#xff0c;数到 m m m 的人再出圈&#xff0c;依次类推&#xff0c;直到所有的人都出圈&#xff0c;请输出依次出圈人的编号。…

Redis实现API访问频率限制

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

代码随想录训练营二刷第三十八天 | 509. 斐波那契数 70. 爬楼梯 746. 使用最小花费爬楼梯

代码随想录训练营二刷第三十八天 | 509. 斐波那契数 70. 爬楼梯 746. 使用最小花费爬楼梯 一、509. 斐波那契数 题目链接&#xff1a;https://leetcode.cn/problems/fibonacci-number/ 思路&#xff1a;dp[i]表示f(n)的值&#xff0c;递推公式&#xff1a; dp[i]dp[i-1]dp[i-…