luogu P4342[IOI1998]Polygon

news/2024/9/30 1:26:41

题目大意

给定一个多边形,对应节点上标记有一个数字,每条边上标记有加(t)或乘(x)表示相邻两个节点可进行的操作,操作后两个节点将合并为一个节点,首先删去一条边(不进行操作),之后在若干次操作后使得该多边形只剩一个节点,且要求所剩节点标记的数最大化,询问最大的数字

题目分析image

如图是题目所给出的示例图,我们可以通过模拟该图来得到我们代码实现的过程。

Quest1:如何处理环?

我们先假定删除了某条边,注意这里第一步是删除,并没有进行操作。
然后我们就要一系列的合并操作,完成之后又要换另一条边删掉,继续下去。。。
很明显这是一个很暴力的算法,而对于这种环状的区间dp问题,大家应该能反应出来,我们可以通过破环成链的方法,具体的就是将原本的一个环在复制一遍,形成一个长度为原先二倍的大环,这个时候随便断哪一条边都没有问题了,所以我们下面的操作中默认断掉了第一条边,或者说是第一条输入的边。

Ques2:如何实现合并?

之后我们可以开始合并操作,在这道题中,我们应当能发现现在是对一条链进行的区间合并操作,很容易就想到区间dp,因此,我们会用到下述转移方程:

\[f[i][j]=max(f[i][j],f[i][k]+f[k+1][j]) \]

不过与常规区间dp的不同之处也显而易见,我们的转移过程中不一定只涉及到加法这一操作,而对于乘法的处理,或许会想到:

\[f[i][j]=max(f[i][j],f[i][k]*f[k+1][j]) \]

似乎到这一步就已经大功告成了,于是我们自信满满的打出以下代码:

点击查看代码
#include<bits/stdc++.h>
using namespace std;
int n,ans=-0x3f3f3f3f;
char op[100];
int dp[200][200];
int main(){cin >> n;memset(dp,-0x3f,sizeof dp);for(int i=1;i<=n;i++){cin >> op[i-1] >> dp[i][i];op[i+n-1]=op[i-1];dp[i+n][i+n]=dp[i][i];}for(int len=2;len<=n;len++)for(int l=1;l<=n;l++){int r=l+len-1;for(int k=l;k<r;k++){if(op[k]=='t') dp[l][r]=max(dp[l][r],dp[l][k]+dp[k+1][r]);if(op[k]=='x') dp[l][r]=max(dp[l][r],dp[l][k]*dp[k+1][r]);}}for(int l=1;l<=n;l++) ans=max(ans,dp[l][l+n-1]);cout << ans << '\n';for(int l=1;l<=n;l++) if(ans==dp[l][l+n-1]) cout << l << ' ';return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

ES底层原理

1、倒排索引 Elasticsearch 使用一种称为倒排索引的结构,它适用于快速的全文搜索。 有倒排索引,肯定会对应有正向索引:正向索引(forward index) 反向索引(inverted index,实际就是倒排索引)所谓的正向索引,就是搜索引擎会将待搜索的文件都对应一个文件ID,搜索时将这个…

金蝶Kis云代码实现

1、金蝶认证(获取到token)也就是code,获取业务接口网关和auth_data,请求头 RequestHeader类 package com.api.xic.jd.tool; import net.sf.json.JSONObject; import java.io.*; import java.net.HttpURLConnection; import java.net.URL; import java.util.HashMap; import…

qt实现窗口B始终显示在窗口A上,且上层窗口在电脑任务栏不显示缩图

场景:窗口A上面始终显示窗口B(透明背景) /*****************************************/ 首先,在主窗口即底部窗口重写changeEvent QtGuiApplication1::QtGuiApplication1(QWidget *parent) : QWidget(parent) , m_pQtGuiClass(nullptr) {ui.setupUi(this);setWindowFlags(Q…

微信开发者工具请求接口 Provisional headers are shown

前情最近全权负责公司小程序项目的开发,使用的uniapp技术栈。 坑在和服务端联调的时候发现,接口pending很久,而且时不时的报Provisional headers are shown,而且出现的概率很大方法尝试?有可能是浏览器插件拦截了,把有可能推荐的插件全停了也没有用 有可能是防火墙拦截了…

时序图

时序图时序图1. 参考资料 2. 基础 3. 符号3.1. 斜线形式的上升沿、下降沿 3.2. Either or 信号 3.3. 波形省略3.2.1. 虚线 3.2.2. 波浪号3.4. 地址&数据表示4. 实例-WT588F语音芯片时序图4.1. 了解背景 4.2. 分析 4.3. 列逻辑 4.4. 根据逻辑写代码(伪代码)5. 总结 others…

移动端定位打卡

签到按钮脚本 Mobile_NS.getCurrPosition(function(result){var lngdangq = result["lng"];var lathoum = result["lat"];var minDistance = null;//alert("addr"+addr);var dkzt = $f("dkzt").val();//alert(dkzt);if(dkzt==0){//$f(…

3秒修复老照片,一键智能变高清!

你肯定有一些年代久远的老照片,以及网络下载的图片或视频,不够高清还非常模糊,如果能一键修复成高清就好了!现在推荐一款神奇的Real-ESRGAN镜像,可以将模糊老照片和视频修复成高清晰,动动手分分钟帮你一键焕新!操作指南这就马上附上!你肯定有一些年代久远的老照片,以及…