Acwing P283 多边形 题解
Analysis
总体来说是一个区间DP
此题首先是一个环,要你进行删边操作,剩下的在经过运算得到一个最大值
注意事项:
1.删去一条边,剩下的构成一条线,相当于求此的最大值,经典区间DP该有的样子;
2.现在大概想法有了,还有一个细节,就是当中会出现负数,负数*负数是可能超过当前的最大值的,所以我们不仅需要维护区间最大值,还有最小值,因为两个极小值相乘是可以超过最大值的。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define int long long
#define maxn 50+10
#define INF 9223372036854775807
using namespace std;
inline int read()
{
int x=;
bool f=;
char c=getchar();
for(; !isdigit(c); c=getchar()) if(c=='-') f=;
for(; isdigit(c); c=getchar()) x=(x<<)+(x<<)+c-'';
if(f) return x;
return -x;
}
inline void write(int x)
{
if(x<){putchar('-');x=-x;}
if(x>)write(x/);
putchar(x%+'');
}
int n;
int sym[*maxn],num[*maxn];
int dp[maxn][*maxn][*maxn],mdp[maxn][*maxn][*maxn];
int ans;
inline int max_five(int a,int b,int c,int d,int e)
{
return max(max(max(a,b),max(c,d)),e);
}
inline int min_five(int a,int b,int c,int d,int e)
{
return min(min(min(a,b),min(c,d)),e);
}
inline void clear()
{
for(int i=;i<=;i++)
{
for(int j=;j<=;j++)
{
for(int k=;k<=;k++)
{
dp[i][j][k]=-INF;
mdp[i][j][k]=INF;
}
}
}
}
signed main()
{
// freopen("ploygon.in","r",stdin);
// freopen("ploygon.out","w",stdout);
clear();
n=read();
for(int i=;i<=*n;i++)
{
if(i%==)
{
char in;
cin>>in;
if(in=='t') sym[i/+]=;
else if(in=='x') sym[i/+]=;
}
else if(i%==) num[i/]=read();
}
for(int i=n+;i<=*n;i++)
{
sym[i]=sym[i-n];
num[i]=num[i-n];
}
for(int j=;j<=n;j++)
{
for(int i=;i<=*n;i++)
{
dp[j][i][i]=num[i];
mdp[j][i][i]=num[i];
}
}
for(int i=;i<=n;i++)
{
for(int len=;len<=n;len++)
{
for(int j=i;j<=i+n-;j++)
{
int k=j+len-;
if(k>=i+n) break;
for(int l=j;l<k;l++)
{
if(sym[l+]==)
{
dp[i][j][k]=max(dp[i][j][k],dp[i][j][l]+dp[i][l+][k]);
mdp[i][j][k]=min(mdp[i][j][k],mdp[i][j][l]+mdp[i][l+][k]);
}
else if(sym[l+]==)
{
dp[i][j][k]=max_five(dp[i][j][k],dp[i][j][l]*dp[i][l+][k],mdp[i][j][l]*dp[i][l+][k],dp[i][j][l]*mdp[i][l+][k],mdp[i][j][l]*mdp[i][l+][k]);
mdp[i][j][k]=min_five(dp[i][j][k],dp[i][j][l]*dp[i][l+][k],mdp[i][j][l]*dp[i][l+][k],dp[i][j][l]*mdp[i][l+][k],mdp[i][j][l]*mdp[i][l+][k]);
}
}
}
}
ans=max(ans,dp[i][i][i+n-]);
}
write(ans);
printf("\n");
for(int k=;k<=n;k++)
{
if(dp[k][k][k+n-]==ans)
{
write(k);
printf(" ");
}
}
return ;
}
请各位大佬斧正(反正我不认识斧正是什么意思)
Acwing P283 多边形 题解的更多相关文章
- Acwing P284 金字塔 题解
Analysis 一棵树的每颗子树都对应着这棵树 DFS 序的一个区间.本题的序列虽然不是 DFS 序列,但也有该性质.本题中,我们以区间长度作为阶段, F[ l , r ] 表示序列 s[ l ~ ...
- Acwing P277 饼干 题解
每日一题 day20 打卡 Analysis 线型动态规划 读入每个人的贪婪度之后,对其按照从大到小的顺序排序,定义状态f[i][j]为前i个人(排序后)分j个饼干的答案,那么答案为f[n][m],考 ...
- AcWing P379 捉迷藏 题解
Analysis 这道题因为我们要给能到达的两个点都连上,又由于n<=200,所以我们可以用n³的传递闭包来建边,再用匈牙利算法来求二分图最大点独立集. #include<iostream ...
- AcWing 走廊泼水节 题解
这道题大致题意就是让一棵树任意两点有连边(也就是完全图),但是补完后最小生成树是一开始的那棵树,问最小加的边权之和是多少. 了解题意后,我们可以想到用Kruskal(废话),当每两个集合合并的时候,除 ...
- csp-s 考前刷题记录
洛谷 P2615 神奇的幻方 洛谷 P2678 跳石头 洛谷 P1226 [模板]快速幂||取余运算 洛谷 P2661 信息传递 LOJ P10147 石子合并 LOJ P10148 能量项链 LOJ ...
- 【HNOI2019】部分题简要题解
题意懒得写了 LOJ Day 1 T1 鱼 个人做法比较猎奇,如果有哪位大佬会证明能分享一下的话感激不尽. 题解:枚举鱼尾和鱼身的交点D,将所有其他点按照到D的距离排序,距离相同的分一组. 感性的理解 ...
- AcWing 785.快速排序
AcWing 785.快速排序题解 题目描述 给定你一个长度为n的整数数列. 请你使用快速排序对这个数列按照从小到大进行排序. 并将排好序的数列按顺序输出. 输入格式 输入共两行,第一行包含整数 n. ...
- 【题解】AcWing 110. 防晒(普及题)
[题解]AcWing 110. 防晒(普及题) AcWing 110. 防晒 你没有用过的全新OJ 嘿嘿水水题. 题目就是一维坐标轴上给定多个线段,给定多个点,点在线段上造成贡献,点可以重复,问最大贡 ...
- 【题解】切割多边形 [SCOI2003] [P4529] [Bzoj1091]
[题解]切割多边形 [SCOI2003] [P4529] [Bzoj1091] 传送门:切割多边形 \(\text{[SCOI2003] [P4529]}\) \(\text{[Bzoj1091]}\ ...
随机推荐
- flask框架(三)——路由系统route转换成add_url_rule及源码分析
这节我们不用@app.route来写路由,而是通过add_url_rule 传统写法 (<int:nid>传递int类型参数,endpoint是取别名) @app.route('/det ...
- InfoGan笔记
InfoGAN: Interpretable Representation Learning by Information Maximizing Generative Adversarial Nets ...
- SVN:修改文件后提示感叹号消失了处理办法
使用SVN发现文件修改后,默认的修改标记红色感叹号不见了 重新显示设置方法: [右键]——[TortoiseSVN]——[Setting] 在[Icon Overlays]中选择[Default]即可 ...
- 5. JDBC/ODBC服务器
Spark SQL也提供JDBC连接支持,这对于让商业智能(BI)工具连接到Spark集群上以及在多用户间共享一个集群的场景都非常有用.JDBC服务器作为一个独立的Spark驱动器程序运行,可以在多用 ...
- git重置账号密码
1.打开控制面板(快捷打开win+R,输入control) 2.点击打开用户账户 3.点击凭据管理器 4.点击windows凭据删除你的git凭据即可
- 使用Identity Server 4建立Authorization Server
使用Identity Server 4建立Authorization Server (6) - js(angular5) 客户端 摘要: 预备知识: http://www.cnblogs.com/cg ...
- python调用jenkinsAPI构建jenkins,并传递参数
安装jenkins 安装jenkins很简单,可以用多种方式安装,这里知道的有: 在官网下载rpm包,手动安装,最费事 centos系统通过yum安装,ubuntu通过apt-get安装(不推荐,因为 ...
- python BeautifulSoup4--例子
from bs4 import BeautifulSoup import requests import re #请求博客园首页 r=requests.get('http://www.cnblogs. ...
- Dubbo -- 四种loadBalance负载均衡算法
Dubbo中的一个关键接口LoadBalance,dubbo是按照其中的规则来调用多台provider的服务的. 先看一下接口的实现类图: 从上图中我们可以看到dubbo提供了四种算法来实现负载均衡. ...
- 从MVC -> MVVM ? 开发模式
MVVM 到底是什么? view :由 MVC 中的 view 和 controller 组成,负责 UI 的展示,绑定 viewModel 中的属性,触发 viewModel 中的命令: viewM ...