CF840C 给定一个序列 \(a\),长度为 \(n\).试求有多少 \(1\) 到 \(n\) 的排列 \(p_i\),满足对于任意的 \(2\le i\le n\) 有 \(a_{p_{i-1}}\times a_{p_i}\) 不为完全平方数,答案对 \(10^9+7\) 取模. \(n \le 300,a_i \le 10^9\). 连续--不是很连续 段dp. 首先考虑什么时候有限制"\(a_{p_{i-1}}\times a_{p_i}\) 为完全平方数". 我们设 \(…
题目大意 对于一个长度为 \(n\) 的排列 \(p\),我们称一个区间 \([l,r]\) 是连续的当且仅当 \((\max_{l\leq i\leq r}a_i)-(\min_{l\leq i\leq r}a_i)=r-l\). 对于两个排列 \(p_1,p_2\),我们称这两个排列是等价的,当且仅当他们的长度相同且连续区间的集合相同. 给你 \(n\),对于 \(1\leq i\leq n\),所有求 \(i\) 阶排列形成的等价类个数对 \(p\) 取模的值. \(n\leq 10000…
http://acm.hdu.edu.cn/showproblem.php?pid=4507 求[L,R]中不满足任意条件的数的平方和mod 1e9+7. 条件: 1.整数中某一位是7:2.整数的每一位加起来的和是7的整数倍:3.这个整数是7的整数倍: 首先想到数位DP,我们看下如何维护. 最基本的dp需要两维来维护起始数字和长度,此外对于数位求和mod 7的余数需要一维来维护,对于一个数mod 7的余数需要一维维护. 此外我们处理一下平方和,对于一个x开头,长度为len的xoo型数集,把它分成…
题目:http://acm.hdu.edu.cn/showproblem.php?pid=3555 题意: 给出一个正整数N,求出1~N中含有数字“49”的数的个数 思路: 采用数位dp的状态转移方程法解 具体如下: dp[len][state];  dp数组的第一位代表数字的位数,第二位代表状态 状态设定: dp[i][0] : i 位数字中不含数字49的数的个数 dp[i][1] : i 位数字中不含数字49,但高位是9的数的个数 dp[i][0] : i 位数字中含有数字49的数的个数 状…
免费馅饼 都说天上不会掉馅饼,但有一天gameboy正走在回家的小径上,忽然天上掉下大把大把的馅饼.说来gameboy的人品实在是太好了,这馅饼别处都不掉,就掉落在他身旁的10米范围内.馅饼如果掉在了地上当然就不能吃了,所以gameboy马上卸下身上的背包去接.但由于小径两侧都不能站人,所以他只能在小径上接.由于gameboy平时老呆在房间里玩游戏,虽然在游戏中是个身手敏捷的高手,但在现实中运动神经特别迟钝,每秒种只有在移动不超过一米的范围内接住坠落的馅饼.现在给这条小径如图标上坐标: 为了使问…
题目链接 分析:有大佬说可以用线性基写,可惜我不会,这是用DP写的 题目明确说明可到达的位置只与能值有关,和下标无关,我们就可以排个序,这样每个数可以转移的区间就是它的所有后缀 我们可以用dp[i][j]表示到达第i个位置,当前耐久度为j是否可行,那就可以根据走或不走两种情况来安排状态转移 也就是说能判断dp[i]j]能不能到达得看存不存在dp[i-1][j]或者dp[i-1][j^a[i].val](注意,两次异或同一数等于没有异或) 另外,排序会存在相等情况,但是题目说过只能到能级比它小的,…
状压dp是将每种状态都压缩成用一个二进制串,然后利用位运算进行操作的dp,而凡是dp都需要进行状态转移 对于简单的dp问题只需要一个二维数组dp[ i ][ j ]就能解决 具体操作为首先把状态压缩为二进制串, 然后对第一行进行初始化, 再利用三个for循环进行状态转移(第一层for循环控制行的前进,第二个和第三个for循环控制本行和上一行的状态) 利用状态转移对二维数组进行不断的更新(可以想到其实就是在不断更新填写一个二维表) 而复杂一点的dp问题就需要一个三维数组dp[ i ][ k ][…
马上区域赛,发现DP太弱,赶紧复习补上. #普通DP CodeForces-546D Soldier and Number Game 筛法+动态规划 待补 UVALive-8078 Bracket Sequence 问以每个字符为左端点的最长括号序列是多长.(包括尖.花.中小括号) 状态:设dp[i]为从i开始的括号序列最长长度. 转移:以i+1为起点的最长串后边的字符若与左括号匹配,答案是加上这个字符后边的最长串,否则为零. HDU-1024 Max Sum Plus Plus 给一个序列,找…
题型:从数组中选择不相邻元素,求和最大 (1)对于数组中的每个元素,都存在两种可能性:(1)选择(2)不选择,所以对于这类问题,暴力方法(递归思路)的时间复杂度为:O(2^n): (2)递归思路中往往会包含大量的重复计算,从时间角度出发,我们一般都会使用动态规划的方法来解决这类问题:而动态规划的核心思想就是:使用变量或者数组来记录重复出现的部分,这样会大大减少计算量,节省时间. (3)在使用动态规划的方法解决这类问题时,一般过程是: 最好先使用暴力分析的方法,按照题意将原题中给出的案例推导出来,…
dp状态压缩 动态规划本来就很抽象,状态的设定和状态的转移都不好把握,而状态压缩的动态规划解决的就是那种状态很多,不容易用一般的方法表示的动态规划问题,这个就更加的难于把握了.难点在于以下几个方面:状态怎么压缩?压缩后怎么表示?怎么转移?是否具有最优子结构?是否满足后效性?涉及到一些位运算的操作,虽然比较抽象,但本质还是动态规划.找准动态规划几个方面的问题,深刻理解动态规划的原理,开动脑筋思考问题.这才是掌握动态规划的关键. 动态规划最关键的要处理的问题就是位运算的操作,容易出错,状态的设计也直…