Hzoi 2018.2.11多边形 区间DP】的更多相关文章

给定一个由N个顶点构成的多边形,每个顶点被赋予一个整数值,而每条边则被赋予一个符号:+(加法运算)或者*(乘法运算),所有边依次用整数1到N标识. 一个多边形的图形表示 首次移动,允许将某条边删除: 接下来的每次顺序移动包括下面步骤: 1.选出一条边E,以及由E联接的顶点V1和V2: 2.用一个新的顶点,取代边E及其所联接的两个顶点V1和V2.新顶点要赋予新的值,这个值是对V1和V2,做由E所指定的运算,所得到的结果. 所有边都被删除后,只剩下一个顶点,游戏结束.游戏的得分就是该顶点的数值. 任…
原题链接:https://www.acwing.com/problem/content/285/ 题意简单来说就是:给你一个环,断掉一条边使其成为一个链,用这个链跑dp,求最大得分. 首先这不是一道板子题...跟板子区别如下: 1.多了一重循环,最开始要求断掉一条边,但是我们不知道要断掉哪一条边,因此需要循环一遍来比较. 2.计算方法有加法有乘法,而且数据有正数有负数.这两个条件任意一个都不足惧,但是如果凑在一起...就很微妙了. 何出此言?比如说,我们用 f [ i ] [ j ]来表示从i号…
题目:http://poj.org/problem?id=1179 区间DP,值得注意的是有负值,而且有乘法,因此可能会影响最大值: 注意memset中写-1仅仅是-1,-2才是一个很小的负数: 最后找mxx时也要注意可能最大是负值,因此不能随便给mxx赋成0或-1之类. 代码如下: #include<iostream> #include<cstdio> #include<cstring> using namespace std; ],mx[][],mn[][],ans…
描述 zgx给了你一个n边的多边形,这个多边形每个顶点赋予一个值,每条边都被标上运算符号+或*,对于这个多边形有一个游戏,游戏的步骤如下:(1)第一步,删掉一条边:(2)接下来n-1步,每步对剩下的边中的一条进行操作,用一个新的顶点取代这条边.将这条被取代的边两端的顶点的整数值通过边上的运算得到的结果赋予新顶点. 最后,所有的边被删除,只剩一个定点,这个定点的整数值就是游戏的最后得分. 你要做的就是算出给你的多边形能得到的最高分和最低分. 格式 输入格式 第一行,n;第二行,n条边的运算符:第三…
题目描述 多边形(Polygon)游戏是单人玩的游戏,开始的时候给定一个由N个顶点构成的多边形(图1所示的例子中,N=4),每个顶点被赋予一个整数值,而每条边则被赋予一个符号:+(加法运算)或者*(乘法运算),所有边依次用整数1到N标识. 图1:一个多边形的图形表示 首次移动(first move),允许将某条边删除: 接下来的每次顺序移动(subsequentmoves),包括下面步骤: 1.选出一条边E,以及由E联接的顶点V1和V2: 2.用一个新的顶点,取代边E及其所联接的两个顶点V1和V…
https://www.nowcoder.com/acm/contest/127/L L 小小粉刷匠 题目描述 "lalala,我是一个快乐的粉刷匠",小名一边快活地唱着歌,一边开心地刷着墙",兴致突然被打断,"小名,你今天如果刷不完这一栋楼的墙,那么你就等着被炒鱿鱼吧",老板声嘶力竭的吼着.苦恼的小名因为不想被炒鱿鱼,所以希望尽量快地刷完墙,由于他本人的数学基础很差,他现在请你来帮助他计算最少完成每一堵墙需要刷多少次.每一面墙有n个段,对于每个段指定一个…
传送门 区间dp好题. 首先我们并不用把右括号拿进来一起dpdpdp,而是直接用左括号来dpdpdp. 然后定义状态fi,jf_{i,j}fi,j​表示区间[l,r][l,r][l,r]的合法方案数. 如果没有限制直接分三种情况讨论就行了. 形如(AB)(AB)(AB) 形如()AB()AB()AB 形如(A)B(A)B(A)B 但是现在有了限制. 因此我们枚举决策的时候判当前转移是否合法. 如何判断呢? 我们建立一个数组statstatstat. stat[a][b]!=0stat[a][b]…
传送门 一道挺妙的区间dp. 我们先用区间dp求出第一个串为空串时的最小代价. 然后再加入原本的字符更新答案就行了. 代码: #include<bits/stdc++.h> using namespace std; char s[105],t[105]; int n,ans[105],f[105][105]; inline int dfs(int l,int r){ if(~f[l][r])return f[l][r]; if(l==r)return f[l][r]=1; f[l][r]=0x…
传送门 区间dp经典题目. 首先断环为链. 然后题目相当于就是在找最大的回文子序列. 注意两个位置重合的时候相当于范围是n,不重合时范围是n-1. 代码: #include<bits/stdc++.h> using namespace std; const int N=2005; int n,a[N],f[N][N]; inline int dfs(int l,int r){ if(l>r)return 0; if(f[l][r])return f[l][r]; if(l==r)retu…
传送门 区间dp好题. f[i][j][k]f[i][j][k]f[i][j][k]表示区间[i,j][i,j][i,j]最小值为kkk时的最大贡献. 然后可以枚举端点转移. 当时口胡到这儿就不会了. 于是细节请教了DZYODZYODZYO学长. 大概就是预处理出区间[l,r][l,r][l,r]中大于等于valvalval的有几个数来优化转移. 每个fff数组中记录: 当前的最优值. k以及其后缀的最优值的最优值. 当前区间最优值取得的端点. 以及对应的数. 代码(跟DZYODZYODZYO的…