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]}\ ...
随机推荐
- laravel使用辅助函数url()引入js和css静态文件
使用laravel框架时可以将静态文件如,js文件,css文件,放到resources文件夹下的js下,当然也可以放到public文件夹下的js文件夹下,publi文件夹下默认情况下是没有css,js ...
- PAT(B) 1067 试密码(Java)
题目链接:1067 试密码 (20 point(s)) 题目描述 当你试图登录某个系统却忘了密码时,系统一般只会允许你尝试有限多次,当超出允许次数时,账号就会被锁死.本题就请你实现这个小功能. 输入格 ...
- xorm - Update,乐观锁,更新时间updated,NoAutoTime()
更新数据使用Update方法 Update方法的第一个参数为需要更新的内容,可以为一个结构体指针或者一个Map[string]interface{}类型. 当传入的为结构体指针时,只有非nil和非0的 ...
- Codeforces Round #567 Div. 2
A:签到. #include<bits/stdc++.h> using namespace std; #define ll long long #define inf 1000000010 ...
- [高清] Java从入门到精通第3版
------ 郑重声明 --------- 资源来自网络,纯粹共享交流, 如果喜欢,请您务必支持正版!! --------------------------------------------- 下 ...
- core文件问题
core文件问题 Linux系统core涉及到的问题 core文件的问题具体可以参照系统的man手册(man core) 能否生成core文件 ulimit -c 磁盘权限问题 进程权限问题 生成co ...
- springboot读取系统级环境变量,和读写系统属性以及unittest来获取环境变量的方法
环境变量的读取以及系统属性的设置 环境变量只能读取,不能修改,系统属性可以修改 系统变量的读取方式: System.getEnv() 系统属性有多重读取和修改方式: 其修改方式为: 读取系统属性: @ ...
- Window 使用Nginx 部署 Vue 并把nginx设为windows服务开机自动启动
1.编译打包Vue项目 在终端输入 npm run build 进行打包编译.等待... 打包完成生成dist文件夹,这就是打包完成的文件. 我们先放着,进行下一步. 2下载Nginx 下载地址: h ...
- metasploit、msfvenom生成木马入侵电脑及手机
简介 msfvenom msfvenom a Metasploit standalone payload generator,Also a replacement for msfpayload and ...
- DEDECMS标签笔记
注意点: 1.dede的标签不可以嵌套(除了channelartlist里面可以嵌套指定的标签),那么当需要使用{dede:global.cfg_webname/}dede标签的时候我们需要转换成[f ...