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 多边形 题解的更多相关文章

  1. Acwing P284 金字塔 题解

    Analysis 一棵树的每颗子树都对应着这棵树 DFS 序的一个区间.本题的序列虽然不是 DFS 序列,但也有该性质.本题中,我们以区间长度作为阶段, F[ l , r ] 表示序列 s[ l ~ ...

  2. Acwing P277 饼干 题解

    每日一题 day20 打卡 Analysis 线型动态规划 读入每个人的贪婪度之后,对其按照从大到小的顺序排序,定义状态f[i][j]为前i个人(排序后)分j个饼干的答案,那么答案为f[n][m],考 ...

  3. AcWing P379 捉迷藏 题解

    Analysis 这道题因为我们要给能到达的两个点都连上,又由于n<=200,所以我们可以用n³的传递闭包来建边,再用匈牙利算法来求二分图最大点独立集. #include<iostream ...

  4. AcWing 走廊泼水节 题解

    这道题大致题意就是让一棵树任意两点有连边(也就是完全图),但是补完后最小生成树是一开始的那棵树,问最小加的边权之和是多少. 了解题意后,我们可以想到用Kruskal(废话),当每两个集合合并的时候,除 ...

  5. csp-s 考前刷题记录

    洛谷 P2615 神奇的幻方 洛谷 P2678 跳石头 洛谷 P1226 [模板]快速幂||取余运算 洛谷 P2661 信息传递 LOJ P10147 石子合并 LOJ P10148 能量项链 LOJ ...

  6. 【HNOI2019】部分题简要题解

    题意懒得写了 LOJ Day 1 T1 鱼 个人做法比较猎奇,如果有哪位大佬会证明能分享一下的话感激不尽. 题解:枚举鱼尾和鱼身的交点D,将所有其他点按照到D的距离排序,距离相同的分一组. 感性的理解 ...

  7. AcWing 785.快速排序

    AcWing 785.快速排序题解 题目描述 给定你一个长度为n的整数数列. 请你使用快速排序对这个数列按照从小到大进行排序. 并将排好序的数列按顺序输出. 输入格式 输入共两行,第一行包含整数 n. ...

  8. 【题解】AcWing 110. 防晒(普及题)

    [题解]AcWing 110. 防晒(普及题) AcWing 110. 防晒 你没有用过的全新OJ 嘿嘿水水题. 题目就是一维坐标轴上给定多个线段,给定多个点,点在线段上造成贡献,点可以重复,问最大贡 ...

  9. 【题解】切割多边形 [SCOI2003] [P4529] [Bzoj1091]

    [题解]切割多边形 [SCOI2003] [P4529] [Bzoj1091] 传送门:切割多边形 \(\text{[SCOI2003] [P4529]}\) \(\text{[Bzoj1091]}\ ...

随机推荐

  1. 使用Kali MDK3无线攻击

    mdk3 <接口> <测试_模块> [测试选项] 例:mdk3 --wlan0mon b (通过mdk3 使用网卡接口调用b类测试模块发起攻击)请注意该mdk3软件在使用时必须 ...

  2. GIT讲解

    一.什么是Git: Git是目前世界上最先进的分布式版本控制系统. 二.为什么要用版本控制系统: 1.更方便的存储版本 2.恢复之前的版本 3.更方便的进行对比 4.协同合作 三.如何安装GIT: 1 ...

  3. spring boot 用@CONFIGURATIONPROPERTIES 和 @Configuration两种方法读取配置文件

    spring cloud  读取 配置文件属性值 1.bean @Data public class LocalFileConfig { /** * 文件存储地址 */ private String ...

  4. LOJ2484 CEOI2017 Palindromic Partitions DP、回文树

    传送门 当我打开Luogu题解发现这道题可以Hash+贪心的时候我的内心是崩溃的-- 但是看到这道题不都应该认为这是一道PAM的练手好题么-- 首先把原字符串重排为\(s_1s_ks_2s_{k-1} ...

  5. Codeforces Round #568 Div. 2

    没有找到这场div3被改成div2的理由. A:签到. #include<bits/stdc++.h> using namespace std; #define ll long long ...

  6. UI5-技术篇-JS函数eval动态执行

    <html lang="en"> <head> <meta charset="utf-8" /> <title> ...

  7. SSM框架之MyBatis入门介绍

    一.什么是MyBatis? MyBatis源自Apache的iBatis开源项目, 从iBatis3.x开始正式更名为MyBatis.它是一个优秀的持久层框架. 二.为什么使用MyBatis? 为了和 ...

  8. python网络爬虫入门(二)

    刚去看了一下,18年2月份写了第一篇关于爬虫的文章(仅仅介绍了使用requests库去获取HTML代码),一年多之后看来很稚嫩也没有多少参考的意义,但没想着要去修改它,留着也是一个回忆吧.至少证明着我 ...

  9. Mock测试框架(Mockito为例)

    在做单元测试的时候,有的时候用到的一些类,我们构造起来不是那么容易,比如HttpRequest,或者说某个Service依赖到了某个Dao,想构造service还得先构造dao,这些外部对象构造起来比 ...

  10. Android笔记(三十八) Android中的数据存储——SharedPreferences

    SharedPreferences是Android提供的一种轻型的数据存储方法,其本质是基于xml文件存储的,内部数据以key-value的方式存储,通常用来存储一些简单的配置信息. SharedPr ...