poj1179多边形——区间DP
题目:http://poj.org/problem?id=1179
区间DP,值得注意的是有负值,而且有乘法,因此可能会影响最大值;
注意memset中写-1仅仅是-1,-2才是一个很小的负数;
最后找mxx时也要注意可能最大是负值,因此不能随便给mxx赋成0或-1之类。
代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int n,a[],mx[][],mn[][],ans[],t,INF=;
bool sid[][];
int main()
{
char dc;
scanf("%d ",&n);
memset(mx,-,sizeof mx);//-1仅是-1!
memset(mn,,sizeof mn);
for(int i=;i<=n;i++)
{
if(i==n)scanf("%c %d",&dc,&a[i]);
else scanf("%c %d ",&dc,&a[i]);
if(dc=='t')sid[i-][i]=;
else sid[i-][i]=;
a[i+n]=a[i];
sid[i-+n][i+n]=sid[i-][i];
mx[i][i]=a[i];mx[i+n][i+n]=a[i];
mn[i][i]=a[i];mn[i+n][i+n]=a[i];
}
for(int l=;l<=n;l++)
for(int i=;i<=n*-l;i++)//
{
int j=i+l-;
for(int k=i;k<j;k++)
{
if(sid[k][k+])
{
mx[i][j]=max(mx[i][j],mx[i][k]+mx[k+][j]);
mn[i][j]=min(mn[i][j],mn[i][k]+mn[k+][j]);
}
else
{
mx[i][j]=max(mx[i][j],mx[i][k]*mx[k+][j]);
mx[i][j]=max(mx[i][j],mn[i][k]*mn[k+][j]);
mx[i][j]=max(mx[i][j],mx[i][k]*mn[k+][j]);
mx[i][j]=max(mx[i][j],mn[i][k]*mx[k+][j]); mn[i][j]=min(mn[i][j],mx[i][k]*mx[k+][j]);
mn[i][j]=min(mn[i][j],mn[i][k]*mn[k+][j]);
mn[i][j]=min(mn[i][j],mx[i][k]*mn[k+][j]);
mn[i][j]=min(mn[i][j],mn[i][k]*mx[k+][j]);
}
}
}
int mxx=-INF;//!-1
// for(int i=1;i<=n;i++)
// {
// if(mx[i][i+n-1]>mxx)
// {
// memset(ans,0,sizeof ans);
// t=1;
// ans[t]=i;
// mxx=mx[i][i+n-1];
// }
// else if(mx[i][i+n-1]==mxx)ans[++t]=i;
// }
// printf("%d\n",mxx);
// for(int i=1;i<=t;i++)
// printf("%d ",ans[i]);
for(int i=;i<=n;i++)
mxx=max(mxx,mx[i][i+n-]);
printf("%d\n",mxx);
for(int i=;i<=n;i++)
if(mx[i][i+n-]==mxx)
printf("%d ",i);
return ;
}
poj1179多边形——区间DP的更多相关文章
- 多边形——————区间dp
原题链接:https://www.acwing.com/problem/content/285/ 题意简单来说就是:给你一个环,断掉一条边使其成为一个链,用这个链跑dp,求最大得分. 首先这不是一道板 ...
- Hzoi 2018.2.11多边形 区间DP
给定一个由N个顶点构成的多边形,每个顶点被赋予一个整数值,而每条边则被赋予一个符号:+(加法运算)或者*(乘法运算),所有边依次用整数1到N标识. 一个多边形的图形表示 首次移动,允许将某条边删除: ...
- POJ1179 Polygon 区间DP
题目大意: 多边形游戏,有N个顶点的多边形,3 <= N <= 50 ,多边形有N条边,每个顶点中有一个数字(可正可负),每条边上或者是“+”号,或者是“*”号.边从1到N编号,首先选择一 ...
- poj1179 环形+区间dp
因为要用到模,所以左起点设置为0比较好 #include<iostream> #include<cstdio> #include<cstring> #define ...
- Vijos 1565 多边形 【区间DP】
描述 zgx给了你一个n边的多边形,这个多边形每个顶点赋予一个值,每条边都被标上运算符号+或*,对于这个多边形有一个游戏,游戏的步骤如下:(1)第一步,删掉一条边:(2)接下来n-1步,每步对剩下的边 ...
- 多边形游戏——区间dp
题目描述 多边形(Polygon)游戏是单人玩的游戏,开始的时候给定一个由N个顶点构成的多边形(图1所示的例子中,N=4),每个顶点被赋予一个整数值,而每条边则被赋予一个符号:+(加法运算)或者*(乘 ...
- poj1179 区间dp(记忆化搜索写法)有巨坑!
http://poj.org/problem?id=1179 Description Polygon is a game for one player that starts on a polygon ...
- kuangbin 区间dp
A - Cake 题目大意:给你一个n个顶点(n<=100)的多边形和每两个点连边的消耗,让你求把这个多边形全部切成三角形所需要的最小消耗,如果这个多边形为凹多边形则输出无解. 思路:先求一个凸 ...
- BZOJ 1719--[Usaco2006 Jan] Roping the Field 麦田巨画(几何&区间dp)
1719: [Usaco2006 Jan] Roping the Field 麦田巨画 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 82 Solved ...
随机推荐
- Django之通过tag推荐文章
#路由 views.py def post_detail(request,year,month,day,post): ''' 文章详情 + 评论详情 :param request: :param ye ...
- 使用OpenGL进行Mandelbrot集的可视化
Mandelbrot集是哪一集?? Mandelbrot集不是哪一集!! 啊不对-- Mandelbrot集是哪一集!! 好像也不对-- Mandelbrot集是数集!! 所以--他不是一集而是数集? ...
- Android——4.2 - 3G移植之路之 reference-ril .pppd 拨号上网 (三)
Android的RIL机制中的 reference-ril.c 即为厂商提供的驱动接口.这个驱动源代码各个厂商都是有提供的,网上也有下载.我如今用的就是huawei wcdma的.最后编译成libre ...
- System.TypeLoadException: Could not load type 'System.IO.Compression.CompressionLevel' from assembly 'System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.
1.提示错误信息: zipSystem.TypeLoadException: Could not load type 'System.IO.Compression.CompressionLevel' ...
- struts2 eclipse集成jdk与tomcat (2)
Eclipse 中集成jdk与tomcat 1. 首次打开Eclipse为让你选择工作空间,选择合适即可. 添加JDK (1) 在Eclipse的菜单中选择window选项,单击 perference ...
- linux 时间格式
版权为个人所有,欢迎转载如转载请说明出处.(东北大亨) http://www.cnblogs.com/northeastTycoon/p/5511718.html 时间域 % H 小时(00..23) ...
- 基于zookeeper或redis实现分布式锁
前言 在分布式系统中,分布式锁是为了解决多实例之间的同步问题.例如master选举,能够获取分布式锁的就是master,获取失败的就是slave.又或者能够获取锁的实例能够完成特定的操作. 目前比较常 ...
- 九度OJ 1175:打牌 (模式匹配)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:8156 解决:1560 题目描述: 牌只有1到9,手里拿着已经排好序的牌a,对方出牌b,用程序判断手中牌是否能够压过对方出牌. 规则:出牌 ...
- 九度OJ 1159:坠落的蚂蚁 (模拟、排序)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:1098 解决:277 题目描述: 一根长度为1米的木棒上有若干只蚂蚁在爬动.它们的速度为每秒一厘米或静止不动,方向只有两种,向左或者向右.如 ...
- Kibana + ElasticSearch
上面一张介绍了ElasticSearch的安装和简单用法. 现在应该都知道ElasticSearch是用来做全文搜索的,那今天我就简单介绍下Kibana. 它是专门用来查看ElasticSearch内 ...