2018.10.23 hdu4745Two Rabbits(区间dp)】的更多相关文章

传送门 区间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. 我们先用区间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…
http://acm.hdu.edu.cn/showproblem.php?pid=4745 题意: 有两只兔子Tom Jerry, 他们在一个用石头围城的环形的路上跳, Tom只能顺时针跳,Jerry只能逆时针跳,  要求在跳的过程中他们所在石头的权值必须相同,而且只能单向跳,中间不能有已经跳过的石头. 思路: 模型就是求环上的最长回文串,我们只要将原串倍增,然后每个长度为n的子串的最长回文串就是我们要求的.区间DP一下就好了, 注意要考虑起点终点是统一点的情况特殊. //#pragma co…
传送门 矩阵快速幂优化dp简单题. 考虑状态转移方程: f[time][u]=∑f[time−1][v]f[time][u]=\sum f[time-1][v]f[time][u]=∑f[time−1][v] 把一个点拆成9个来转换边长,然后根据题意模拟连边就行了. 最后用矩阵快速幂优化一下转移就能过啦. 代码: #include<bits/stdc++.h> using namespace std; int n,t,m; char s[50]; const int mod=2009; str…
传送门 这道单调队列真的有点难写啊. 方程感觉挺简单的. f[i][j]f[i][j]f[i][j]表示在第iii个车间结束前jjj次步骤的最小代价. 然后用单调队列毒瘤优化一下就行了. 代码: #include<bits/stdc++.h> using namespace std; #define ll long long #define fi first #define se second const int M=100005; int m,n,L,hd[6][6],tl[6][6]; l…
题目大意 给出一个长度为n的环状序列,两只兔子各自从一个点出发,一个顺时针跳,一个逆时针跳,每个时刻都要求两只兔子所在的数字是相同的,兔子最多跳一个圈~~~问兔子们最多能跳多少次 题解 一个逆时针跳,一个顺时针跳,经过的数字刚好组成了一个回文串,所以题目的要求就是求最长的回文,不过序列是环状的!怎么办?我们看看样例:2 1 1 2 1 3 答案是5 即2 1 1 2 1 3,其实就是[1,4]区间的最长回文加上[5,6]区间的最长回文,因此我们枚举中间点i,求出max(dp[1,i]+dp[i+…
day1 100+100+0=200 T1 稍微比划一下,发现其实就是缩点双,然后区间最小值的和 T2 发现答案为原lis|+1|-1 对每个点做从前最长上升序列以及从后最长下降序列, 想了半个小时怎么判断唯一点,直接用map维护 T3 只想到了个状压dp, 结果调不出来 day2 //坑…
传送门 卡常题. 成功卡掉了作死写树套树的zxy. 然而对我的二维bit无能为力. 直接维护两棵bit. bit1[i][j]bit1[i][j]bit1[i][j]表示左端点小于等于iii,右端点小于等于jjj的区间总数. bit2[i][j]bit2[i][j]bit2[i][j]表示左端点大于等于iii,右端点大于等于jjj的区间总数. 然后简单容斥一下就行了. 然后考试的时候sb了开了三棵仍然没有被卡常 正解需要压位. 代码…
传送门 好题. 考察了莫队和组合数学两个知识板块. 首先需要推出单次已知n,mn,mn,m的答案的式子. 我们令f[i]f[i]f[i]表示当前最大值为第iii个数的方案数. 显然iii之后的数都是单调递减且连续的. 所以后面的方法是1种. 考虑第111~i−1i-1i−1个位置. 显然放法数为∑j=1i−1f[j]\sum _{j=1} ^{i-1}f[j]∑j=1i−1​f[j] 又因为f[1]=1,f[i−1]=∑j−1i−2f[j]f[1]=1,f[i-1]=\sum _{j-1} ^{…
传送门 考试70分骗分写挂了=30分=全场最低. 哎今天230垫底了. 这题出的挺好. 对于非关键点直接缩点. 每次把要查的insertinsertinsert进缩好的图里面跑spfa/dijkstraspfa/dijkstraspfa/dijkstra就行了. 代码…
传送门 跟bzoj1015: [JSOI2008]星球大战是同一道题啊讲道理. 随便合并一下就能过了. 代码…
建出差分序列,可以发现最早出现的回文串就是答案,自己想想就懂了. \(O(N)\)找出回文串就好了,字符串\(hash\)或者\(manacher\)都能在合法时间内得到答案. #include<cstdio> #include<algorithm> using namespace std; const int mod=1e9+7; int flag,n,d[2000001],pos[2000001],h[20000001],q[20000002],k=233; int main(…
i207M的“怕不是一个小时就要弃疗的flag”并没有生效,这次居然写到了最后,好评=.= 然而可能是退役前和i207M的最后一场比赛了TAT 不过打得真的好爽啊QAQ 最终结果: 看见那几个罚时没,全是我贡献的,还全是睿智的细节错误(逃 不罚时估计就进前100了啊QAQ,我好菜啊.jpg 我切了3道(然后挂了四次2333,i207M切了4道(orz),具体比赛历程太长了,不好写,就在题上写吧=.= A.Find a Number 开场不到十分钟就有神仙切了这神仙题 因为种种原因,这题到吃晚饭的…
目录 2018.10.23 正睿停课训练 Day7 A 矩形(组合) B 翻转(思路) C 求和(思路 三元环计数) 考试代码 B1 B2 C 2018.10.23 正睿停课训练 Day7 期望得分:100+?+40 实际得分:100+20+40 比赛链接 A 矩形(组合) 题目链接 #include <cstdio> #include <cctype> #include <algorithm> #define gc() getchar() #define mod 10…
题目描述: 给定一串序列x[],其中的每一个Xi看作看作一颗珠子,每个珠子包含两个参数,head和tail,前一颗的tail值是后一个的head值,珠子呈现环形(是一条项链),所以最后一颗的tail是第一个珠子的head.当tail遇到对应的head时会放出 Xi.head*Xi.tail*X++i.head,之后这两颗相邻的珠子会变成新的一颗Xp,它的参数为Xp.head=Xi.head,Xp.tail=X++i.tail,问整条项链合并到只剩下一颗时所能产生的最大能量. 题目链接:P1063…
传送门 区间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好题. 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的…
传送门 区间dp入门题. 可以想到当前吃掉的草一定是一个区间(因为经过的草一定会吃掉). 然后最后一定会停在左端点或者右端点. f[i][j][0/1]f[i][j][0/1]f[i][j][0/1]表示已经吃了[i,j][i,j][i,j]的草,最后停在左/右端点. 利用费用提前计算的思想转移就行了. 代码: #include<bits/stdc++.h> #define N 1005 #define ll long long using namespace std; ll f[N][N][…
Two Rabbits Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others) Total Submission(s): 1274 Accepted Submission(s): 641 Problem Description Long long ago, there lived two rabbits Tom and Jerry in the forest. On a sunny aft…
C - Two Rabbits 这个题目的意思是,n块石头围一圈.一只兔子顺时针,一只兔子逆时针(限制在一圈的范围内). 这个题目我觉得还比较难,不太好想,不过后来lj大佬给了我一点点提示,因为是需要跳到相同的重量的石头上去, 所以这个就和回文序列有关系了,我也明白和回文序列有关系了,因为他们是不同方向的,而且又要跳到相同重量的石头上去, 所以这个就说明我需要找一段回文序列,找到的这段回文序列的长度就是兔子可以跳的长度,所以我们应该求这一段区间的最长回文子序列. 但是注意,这个和普通的回文不太一…
https://www.nowcoder.com/acm/contest/127/L L 小小粉刷匠 题目描述 "lalala,我是一个快乐的粉刷匠",小名一边快活地唱着歌,一边开心地刷着墙",兴致突然被打断,"小名,你今天如果刷不完这一栋楼的墙,那么你就等着被炒鱿鱼吧",老板声嘶力竭的吼着.苦恼的小名因为不想被炒鱿鱼,所以希望尽量快地刷完墙,由于他本人的数学基础很差,他现在请你来帮助他计算最少完成每一堵墙需要刷多少次.每一面墙有n个段,对于每个段指定一个…
传送门 区间dp简单题啊. 很显然用f[l][r]f[l][r]f[l][r]表示把区间[l,r][l,r][l,r]按要求染好的代价. 这样可以O(n)O(n)O(n)枚举断点转移了啊. 显然如果断开的两个点颜色相同可以省掉一次. 但是注意如果[l,r][l,r][l,r]两端点相同同样可以省掉一部分代价(细节见代码). 代码: #include<bits/stdc++.h> #define N 55 using namespace std; int n,col[N],f[N][N]; ch…
Play Game Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=4597 Description Alice and Bob are playing a game. There are two piles of cards. There are N cards in each pile, and each card has a score. They take tur…
退役前的记录 诸位好,我是\(CJ\)最菜的\(Oier\),已经是\(G2\)的老年选手了,不知道什么时候就会退役了,总之\(G1\ double\)的机会已经没有了,去年因为联赛失利而止步,而今年虽然有了很大的进步,但留给我犯错的机会却没有了,联赛,\(WC\),省选,\(SC\),\(NOI\),我不知道我能坚持到什么时候,只要有一点失误,就真的要退役了.在这新的赛季,我不知道我什么时候就会永远的离开\(OI\),只是想记下这\(OI\)生涯最后的时光,在退役之后也能留下奋斗过的痕迹,能让…
Play Game Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others) Total Submission(s): 1274 Accepted Submission(s): 737 Problem Description Alice and Bob are playing a game. There are two piles of cards. There are N cards in…
感觉对区间dp也不好说些什么直接照搬讲义了2333 例题: 1.引水入城(洛谷1514) 这道题先开始看不出来到底和区间dp有什么卵关系···· 首先肯定是bfs暴力判一判可以覆盖到哪些城市····无解直接输出···有解得话就要想想了···· 这道题关键是要发现··如果一个蓄水池所在城市可以覆盖到一些沙漠城市···那么这些沙漠城市肯定是一段连续区间····不然假设有一个城市是断开的而两边都被同一个蓄水池流出的水覆盖,这个城市四周的城市都肯定比它矮···(不理解举个反例吧···反正我举不出来)··…
Running Routes \[ Time Limit: 12000 ms\quad Memory Limit: 1048576 kB \] 题意 给出一个正 \(n\) 边形,标号顺时针从 \(0\) 到 \(n-1\),现在给出 \(n \times n\) 的矩阵,表示从点 \(i\) 到点 \(j\) 有一条边,现在想要让你从中选出最多的边,满足选出的边严格不相交. 思路 令 \(dp[i][j]\) 表示顺时针从节点 \(i\) 到节点 \(j\) 内,最多可以选出多少边.注意 \(…
区间dp专题练习 题意 1.Equal Sum Partitions ? 这嘛东西,\(n^2\)自己写去 \[\ \] \[\ \] 2.You Are the One 感觉自己智力被吊打 \(dp[i][j]\)表示 , 对于当前的一个空栈 , \(i\)到\(j\)这一段都出栈的最小花费 显然是长得一副区间(诡)dp(异)的样子 , 如何转移呢?(建议自己想想吧) 对于一个\(dp[i][j]\),因为这个\(i\)必须是最先入栈的 , 所以我们可以枚举它的出栈时间\(k\) , 那么总贡…
题意: 给你一个多边形(可以看作n个顶点,n-1条边的图),每一条边上有一个符号(+号或者*号),这个多边形有n个顶点,每一个顶点有一个值 最初你可以把一条边删除掉,这个时候这就是一个n个顶点,n-2条边的图 如果顶点i和j之间有边,那么你可以把i点和j点合并成一个点,把这个点替换掉i.j两个点,这个新点的值是i+j 或者 i*j (这个是要看连接i和j两点的边上的符号) 经过若干次操作之后剩下一个点,这个点的值最大是多少 题解: 这道题目和石子合并题目很相似,这里先说一下石子合并 题目: 有N…
原题链接:https://www.acwing.com/problem/content/285/ 题意简单来说就是:给你一个环,断掉一条边使其成为一个链,用这个链跑dp,求最大得分. 首先这不是一道板子题...跟板子区别如下: 1.多了一重循环,最开始要求断掉一条边,但是我们不知道要断掉哪一条边,因此需要循环一遍来比较. 2.计算方法有加法有乘法,而且数据有正数有负数.这两个条件任意一个都不足惧,但是如果凑在一起...就很微妙了. 何出此言?比如说,我们用 f [ i ] [ j ]来表示从i号…