洛谷P4342 [IOI1998]Polygon
题目
https://www.luogu.com.cn/problem/P4342
我会做IOI题辣
思路
算法设计与分析的课堂例题。
首先这是一个环状DP,那么根据老套路,破环成链。发现要求的东西也很相关,就是求环从哪里断开可取到最优解,然后我们就可以很自信地接着往下做了。
考虑链的情况,是一个很裸的区间DP的形式。对区间[j,i],枚举中断点k,根据符号合并左右两段的结果即可。
比较坑的一点就是乘法。可以发现负数对乘法造成了很坏的影响,不能直接用最大值乘最大值。但是必然是极值乘极值。
于是可以同时维护一个区间的最小DP值和最大DP值,把4种组合方式都查一遍就得到正确的解了。
因为情况比较多,所以转移方程不好写,不过看代码应该就明白了。
代码
点击查看代码
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#define inf 0x3f3f3f3f
using namespace std;
int num[200],op[200];
int dp[2][200][200];//dp[0][i][j]表示i~j区间得到的最小值,dp[1][i][j]表示最大值
int main(){
int i,j,n,m,k;
int x;
int ans=-inf;
char s[10];
scanf("%d",&n);
for(i=1;i<=2*n;++i){
if(i&1){
scanf("%s",s);
if(s[0]=='t') op[(i+1)/2]=1;
else op[(i+1)/2]=2;
}
else{
scanf("%d",&x);
num[i/2]=x;
}
}
for(i=n+1;i<=2*n;++i) num[i]=num[i-n];
for(i=n+1;i<=2*n;++i) op[i]=op[i-n];
for(i=1;i<=2*n;++i){
dp[1][i][i]=dp[0][i][i]=num[i];
for(j=i-1;j>=i-n+1&&j>=1;--j){
dp[1][j][i]=-inf;dp[0][j][i]=inf;
for(k=j;k<i;++k){
if(op[k+1]==1){
dp[1][j][i]=max(dp[1][j][i],dp[1][j][k]+dp[1][k+1][i]);
dp[0][j][i]=min(dp[0][j][i],dp[0][j][k]+dp[0][k+1][i]);
}
else{
dp[1][j][i]=max(dp[1][j][i],dp[1][j][k]*dp[1][k+1][i]);
dp[1][j][i]=max(dp[1][j][i],dp[1][j][k]*dp[0][k+1][i]);
dp[1][j][i]=max(dp[1][j][i],dp[0][j][k]*dp[1][k+1][i]);
dp[1][j][i]=max(dp[1][j][i],dp[0][j][k]*dp[0][k+1][i]);
dp[0][j][i]=min(dp[0][j][i],dp[0][j][k]*dp[0][k+1][i]);
dp[0][j][i]=min(dp[0][j][i],dp[1][j][k]*dp[0][k+1][i]);
dp[0][j][i]=min(dp[0][j][i],dp[0][j][k]*dp[1][k+1][i]);
dp[0][j][i]=min(dp[0][j][i],dp[1][j][k]*dp[1][k+1][i]);
}
}
}
}
for(i=1;i<=n;++i){
ans=max(ans,dp[1][i][i+n-1]);
}
printf("%d\n",ans);
for(i=1;i<=n;++i){
if(dp[1][i][i+n-1]==ans) printf("%d ",i);
}
// system("pause");
return 0;
}
洛谷P4342 [IOI1998]Polygon的更多相关文章
- 洛谷 P4342 [IOI1998]Polygon
题目传送门 解题思路: 一道环形dp,只不过有个地方要注意,因为有乘法,两个负数相乘是正数,所以最小的数是负数,乘起来可能比最大值大,所以要记录最小值(这道题是紫题的原因). AC代码: #inclu ...
- 【洛谷P4342】[IOI1998]Polygon
Polygon 比较裸的环形DP(也可以说是区间DP) 将环拆成链,复制到后面,做区间DP即可 #include<iostream> #include<cstdio> usin ...
- 【洛谷 P4342】[IOI1998]Polygon(DP)
题目链接 题意不再赘述. 这题和合并石子很类似,但是多了个乘法,而乘法是不满足"大大得大"的,因为两个非常小的负数乘起来也会很大,一个负数乘一个很大的整数会很小,所以我们需要添加一 ...
- P4342 [IOI1998]Polygon
题意翻译 题目可能有些许修改,但大意一致 多边形是一个玩家在一个有n个顶点的多边形上的游戏,如图所示,其中n=4.每个顶点用整数标记,每个边用符号+(加)或符号*(乘积)标记. 第一步,删除其中一条边 ...
- luogu P4342 [IOI1998]Polygon
IOI早期这么多dp? 题目要求断掉环上的一边,我们可以断环为链,开两倍数组 容易想到dp,设\(f_{i,j}\)为区间\([i,j]\)的最大值,然后就是个枚举断点的区间dp 不过可能会有负数出现 ...
- 洛谷 P1856 【Picture】
题目描述 N(N<5000) 张矩形的海报,照片和其他同样形状的图片贴在墙上.它们的边都是垂直的或水平的.每个矩形可以部分或者全部覆盖其他矩形.所有的矩形组成的集合的轮廓称为周长.写一个程序计算 ...
- 洛谷 P3187 BZOJ 1185 [HNOI2007]最小矩形覆盖 (旋转卡壳)
题目链接: 洛谷 P3187 [HNOI2007]最小矩形覆盖 BZOJ 1185: [HNOI2007]最小矩形覆盖 Description 给定一些点的坐标,要求求能够覆盖所有点的最小面积的矩形, ...
- 洛谷1640 bzoj1854游戏 匈牙利就是又短又快
bzoj炸了,靠离线版题目做了两道(过过样例什么的还是轻松的)但是交不了,正巧洛谷有个"大牛分站",就转回洛谷做题了 水题先行,一道傻逼匈牙利 其实本来的思路是搜索然后发现写出来类 ...
- 洛谷P1352 codevs1380 没有上司的舞会——S.B.S.
没有上司的舞会 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description Ural大学有N个职员,编号为1~N.他们有 ...
- 洛谷P1108 低价购买[DP | LIS方案数]
题目描述 “低价购买”这条建议是在奶牛股票市场取得成功的一半规则.要想被认为是伟大的投资者,你必须遵循以下的问题建议:“低价购买:再低价购买”.每次你购买一支股票,你必须用低于你上次购买它的价格购买它 ...
随机推荐
- Linux基础环境的各项配置(三)
接上篇,安装centos操作系统后,需对系统的基础环境做一些配置,如下: 1.设置静态IP(防止每次开机可能生成不一样的IP,导致与此虚拟机通信时出现错误):DNS解析,可以ping通外网: 1.1 ...
- 【ADB命令】获取应用包名
打开cmd,输入命令,然后点击要查看的应用,即可获取对应包名. adb shell am monitor
- golang 用gorm生成module文件
网上的包过于繁琐复杂.所以写个简单.mysql的多种数据类型没有全部实现转化.可以编译成可执行文件. package main import ( "flag" "fmt& ...
- [OC] 按照 元素 中的某个属性 来对数组进行排序
数组需要是 NSMutableArray 类型: //ascending - YES:升序,1,2,3 NO:降序:3,2,1 NSArray *sortDescriptors = [NSArray ...
- react native 音频播放 react-native-sound
先放一个效果图:该图实现的效果,点击播放按钮,进度条随着时间移动,点击暂停按钮,进度条停止移动 第一步,用到什么库 1.zmxv/react-native-sound 播放声音的库 2.calls ...
- kali对安卓的渗透(内网穿透)
前言:随着移动端的增加,安卓占比巨大,人们对手机的安全防范意识薄弱,手机为了人们更加的方便,缺乏防护软件,甚至好多木马不需要做免杀. 现在我来做安卓的渗透,不需要在内网也能进行,实现了内网穿透.(有公 ...
- AI-Chat问答随笔
Q: 操作系统和驱动的关系 A:操作系统和驱动程序是紧密相关的,它们一起构成了计算机系统中的软件部分,实现了对硬件资源的管理和控制.操作系统作为计算机系统的核心软件,主要负责管理和协调计算机系统中的各 ...
- 22_webpack_优化
Terser是一个JS的解析(Parser).Mangleer(绞肉机).Compresor(压缩机)的工具 绞肉机如:一个函数 function functionsWithLongNames(){ ...
- 《【转载】ChatGPT创始人,给我们上的8堂课》 回复
<[转载]ChatGPT创始人,给我们上的8堂课> https://tieba.baidu.com/p/8276644432
- MxDraw云图平台 2022.08.24更新
SDK开发包下载地址: https://www.mxdraw.com/ndetail_30187.html 1. 增加对像扩展数据功能 2. 增加CAD GIS使用功能 https://www.mxd ...