mine:dp】的更多相关文章

一个小的线性dp.方法很多,八仙过海各显神通. 我想讲一下我的: #include<cstdio> #define mod 1000000007 ];][][],n;//是不是雷,右边有没有雷 int main(){ scanf(); ;s[n];n++);n--; dp[][][]=dp[][][]=; ;i<=n;++i) ][]=dp[i-][][]; ][]=dp[i-][][],dp[i][][]=dp[i-][][]; ][]=dp[i-][][]; ][]=dp[i][][…
题目链接:https://vjudge.net/problem/27377/origin 题意: 有一栋n层高的楼,并给你k个水球.在一定高度及以上将水球扔下,水球会摔破:在这个高度以下扔,水球不会摔破,并且可以捡起来再用.现在你要通过不断地试扔水球,找出在这栋楼上的第几层扔水球,恰好能让水球摔破.问你在最坏情况下,最少扔几次可以保证找出这个层数(若大于63次则输出'More than 63 trials needed.'). 题解: 这个问题可以转化成: 花费i个球,j次扔水球,最多能确定几层…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1028 题意: 给你一个正整数n,将n拆分成若干个正整数之和,问你有多少种方案. 注:"4 = 3 + 1"和"4 = 1 + 3"视为同一种方案.(加数是无序的) 题解1(dp): 表示状态: dp[n][m] = num of methods 表示用均不超过m的元素组成n的方法数. 如何转移: 假设当前状态为dp[n][m]. 对于等于m的元素,有两种决策.要么不用,…
传送门 题意 有 $ 2n $ 个球排成一行,其中恰好有 $ n $ 个白球和 $ n $ 个黑球.每个球上写着数字,其中白球上的数字的并集为 $ \lbrace 1 \dots n\rbrace $ ,黑球上的数字的并集也为 $ \lbrace 1 \dots n\rbrace $ . 你可以交换任意两个相邻的球若干次,以使得对于所有白球,数字大小从左到右递增,黑球也是一样. 问你最少的交换次数.$ (n \leq 2000) $ 题解 如果所有球最后的位置 $ P(i) $ 已经确定,那么最…
题目链接:http://codeforces.com/problemset/problem/893/E 题意: 共q组数据(q <= 10^5),每组数据给定x,y(x,y <= 10^6). 问你有多少种长度为y,乘积为x的整数数列.(可以有负数) 题解: 首先考虑数列只有正整数的情况. 将x分解质因数:x = ∑ a[i]*p[i] 由于x较大,所以要先用线性筛求出素数,再枚举素数分解质因数. 那么一个乘积为x的数列可以看做,将x的所有∑ p[i]个质因子,分配到了y个位置上. 设f(i)…
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1677 题意: 给定n(n <= 10^6),将n分解为2的幂次方之和,问你有多少种方法. 题解: 两种方法. 一.无限背包 将1,2,4,8...看作物品体积就好. 复杂度O(n*k),k约为20. 二.递推 对于dp[i],有两种情况. (1)i为奇数.则分解结果中一定有1. 所以dp[i] = dp[i-1]. (2)i为偶数.再分两种情况: a. 分解结果中有1,所以dp[i] +…
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2023 题意: 有n个家族,共m只蚂蚁(n <= 1000, m <= 100000). 每个家族有cnt[i]只蚂蚁,并且同一家族中的蚂蚁无差别. 从窝里爬出来x只蚂蚁的方案数为f(x). 给定a,b,让你求 ∑ f(a to b) MOD 1000000. 题解: 表示状态: dp[i][j] = combinations i:第i个家族已经考虑过了 j:目前出来了j只蚂蚁 找出答案…
Description 传说很久以前,大地上居住着一种神秘的生物:地精. 地精喜欢住在连绵不绝的山脉中.具体地说,一座长度为 N 的山脉 H可分 为从左到右的 N 段,每段有一个独一无二的高度 Hi,其中Hi是1到N 之间的正 整数. 如果一段山脉比所有与它相邻的山脉都高,则这段山脉是一个山峰.位于边 缘的山脉只有一段相邻的山脉,其他都有两段(即左边和右边). 类似地,如果一段山脉比所有它相邻的山脉都低,则这段山脉是一个山谷. 地精们有一个共同的爱好——饮酒,酒馆可以设立在山谷之中.地精的酒馆…
题目描述 有一个$1$维的扫雷游戏,每个格子用$*$表示有雷,用$0/1/2$表示无雷并且相邻格子中有$0/1/2$个雷.给定一个仅包含$?$.$*$.$0$.$1$.$2$的字符串$s$,问有多少种方法将所有的$?$改为$*/0/1/2$使其合法. 输入格式 一行一个字符$s$. 输出格式 一行一个整数表示答案,对${10}^9+7$取模. 样例 样例输入: ?1? 样例输出: 数据范围与提示 对于$30\%$的数据,$|S|\leqslant 20$.对于$60\%$的数据,$|S|\leq…
题目描述 对于从1到N (1 <= N <= 39) 的连续整数集合,能划分成两个子集合,且保证每个集合的数字和是相等的.举个例子,如果N=3,对于{1,2,3}能划分成两个子集合,每个子集合的所有数字和是相等的: {3} 和 {1,2} 这是唯一一种分法(交换集合位置被认为是同一种划分方案,因此不会增加划分方案总数) 如果N=7,有四种方法能划分集合{1,2,3,4,5,6,7},每一种分法的子集合各数字和是相等的: {1,6,7} 和 {2,3,4,5} {注 1+6+7=2+3+4+5}…
背景 农民John的牛喜欢玩硬币,所以John就为它们发明了一个新的两人硬币游戏,叫做Xoinc. 描述 最初地面上有一堆n个硬币(5<=n<=2000),从上面数第i个硬币的价值为C_i(1<=C_i<=100000); 游戏开始后,A先取一枚或两枚硬币.如果A取了一枚,那么B可以继续取一枚或两枚:如果A取了两枚,那么B可以取一到四枚硬币.每次都只能从最上面取.每一次,当前取硬币的人都至少取一枚硬币,最多可以取他的对手上一次取硬币数目的两倍.当没有硬币可取的时候,游戏就结束了.…
背景 NOIP 2000 普及组 第三道 描述 今年是国际数学联盟确定的“2000——世界数学年”,又恰逢我国著名数学家华罗庚先生诞辰90周年.在华罗庚先生的家乡江苏金坛,组织了一场别开生面的数学智力竞赛的活动,你的一个好朋友XZ也有幸得以参加.活动中,主持人给所有参加活动的选手出了这样一道题目:设有一个长度N的数字串,要求选手使用K个乘号将它分成K+1个部分,找出一种分法,使得这K+1个部分的乘积能够为最大.同时,为了帮助选手能够正确理解题意,主持人还举了如下的一个例子:有一个数字串: 312…
Description 急!灾区的食物依然短缺! 为了挽救灾区同胞的生命,心系灾区同胞的你准备自己采购一些粮食支援灾区,现在假设你一共有资金n元,而市场有m种大米,每种大米都是袋装产品,其价格不等,并且只能整袋购买. 请问:你用有限的资金最多能采购多少公斤粮食呢? 后记: 人生是一个充满了变数的生命过程,天灾.人祸.病痛是我们生命历程中不可预知的威胁. 月有阴晴圆缺,人有旦夕祸福,未来对于我们而言是一个未知数.那么,我们要做的就应该是珍惜现在,感恩生活―― 感谢父母,他们给予我们生命,抚养我们成…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1176 题意: 横坐标范围为[0,10],你在第0秒站在坐标为5的地方. 在接下来的一段时间内,会有n个馅饼落下来,每一个馅饼有一个位置x和时刻t. 每一秒你最多可以移动1格.并且在某一个时刻,你只能接到你当前位置的馅饼. 问你最多能接到多少馅饼. 题解: 表示状态: dp[i][j] = max num of pancakes (1)第i秒 (2)站在j的位置 如何转移: 当前dp[i][j]取决于…
Dirichlet Process and Hierarchical Dirichlet Process 原文:http://hi.baidu.com/zentopus/item/46a622f5ef13e4c5a835a28e Dirichlet Process and Hierarchical Dirichlet Process 在这篇文章里,我会初步地介绍Dirichlet Process以及Hierarchical Dirichlet Process,不过仅仅局限于模型本身,并不涉及其i…
前言: 话说DP这种纯考思维的题目,总是让我很伤脑筋,一些特别简单的DP我都常常做不出来,所以革命从现在(2018-05-01)开始,努力多刷点DP的练习-. 1.顺序对齐(align) 时间:2018-05-01 Description 考虑两个字符串右对齐的最佳解法.例如,有一个右对齐方案中字符串是AADDEFGGHC 和 ADCDEGH . AAD_DEFGGHC ADCDE__GH_ 每一个数值匹配的位置值 +2分,一段连续的空格值 -1 分.所以总分是匹配点的 2 倍减去连续空格的段数…
题目链接:http://codeforces.com/problemset/problem/158/E 题意: 你有n个电话要接,每个电话打进来的时刻为第t[i]分钟,时长为d[i]分钟. 每一个电话打进来时,你有两种选择: 将电话挂掉,或接听(如果当时正在打其他电话,则这个电话加入等待队列,等上一个电话打完后立马接听) 你最多能挂掉k个电话. 时间从第1分钟开始算,一直到86400分钟结束,问你能够获得的最长连续间隔为多长时间. 题解: 表示状态: dp[i][j] = clocks 表示打了…
题目链接:http://codeforces.com/problemset/problem/358/D 题意: 有n个物品A[i]摆成一排,你要按照某一个顺序将它们全部取走. 其中,取走A[i]的收益为: (1)若A[i-1]和A[i+1]都没被取走,则收益为a[i] (2)若A[i-1]和A[i+1]被取走了一个,则收益为b[i] (3)若A[i-1]和A[i+1]都被取走,则收益为c[i] 注:将A[1]的左边和A[n]的右边视为永远有一个取不走的物品. 问你最大收益是多少. 题解: 表示状…
题目链接:http://codeforces.com/problemset/problem/478/D 题意: 给你r个红方块和g个绿方块,让你用这些方块堆一个塔. 最高层有1个方块,每往下一层块数+1,同时要保证每层中的方块都是同一种颜色. 如图: 问你在塔的高度最高的前提下,堆出塔的方案数. 题解: 假设塔最高能堆d层,则: d*(d+1)/2 <= r+g 解得: d = floor((-1+sqrt(1+8*(r+g)))/2) 并且d最大不超过900. 表示状态: dp[i][j] =…
题目链接:http://codeforces.com/problemset/problem/294/B 题意: 有n本书,每本书的厚度为t[i],宽度为w[i] (1<=t[i]<=2, 1<=w[i]<=100). 然后让你将所有书按照下面的方式摆放: 在下面放一本书会占用下面t[i]的长度. 在上面放一本书会占用上面w[i]的长度. 最终要保证上面的总长度不超过下面的总长度. 问你下面的总长度最小是多少. 题解: 表示状态: dp[i][j] = min length 表示已经…
题目链接:http://codeforces.com/problemset/problem/372/B 题意: 给你一个n*m的01矩阵(1 <= n,m <= 40). 然后有t组询问(a,b,c,d),问你: 在以(a,b)为左上角,以(c,d)为左下角,围成的矩形范围中,有多少全是0的矩形. 题解: 这题是dp套dp…… 首先解决dp1: 表示状态: f[a][b][c][d] = Rectangles number 表示左上角为(a,b),右下角的范围在(c,d)以内的全0矩形的个数.…
题目链接:http://codeforces.com/problemset/problem/571/B 题意: 给你一个长度为n的数列a[i]. 现在你可以随意改变数字的位置,问你 ∑| a[i] - a[i+k] | 的最小值(1 <= i <= n-k). 题解: 将a[i]拆成若干个子序列s[j],子序列中相邻两数在a[i]中的距离为k. 此时原式 = ∑(子序列s[j]内部之差的和) 显然,要想使子序列s[j]内部之差的和尽可能小,子序列s[j]内部一定为升序. 显然,要想使 ∑(子序…
题目链接:http://codeforces.com/problemset/problem/505/C 题意: 有n个宝石,分别在位置p[i].(1 <= n,p[i] <= 30000) 初始时你在位置0,第一次走可以往前跳d的距离. 从第二次跳开始,如果前一次跳的距离是x,这一次跳的距离只能是x-1,x,x+1中的一种. 没每跳到一个地方,会获得那里的所有宝石. 问你最多能拿到多少宝石. 题解: 表示状态: dp[i][j] = max gems 表示初始在位置i,上一次跳的距离为j,在这…
题目链接:http://codeforces.com/problemset/problem/429/B 题意: 给你一个n*m的网格,每个格子上有一个数字a[i][j]. 一个人从左上角走到右下角,一个人从左下角走到右上角,要求两条路径有且仅有一个交点. 问你除去交点格子上的数字,路径上数字之和最大是多少. 题解: 表示状态: dp[i][j][0/1/2/3] = max sum 表示从某个角走到(i,j)这个格子,最大路径上数字之和 0,1,2,3分别代表左上角.右上角.左下角.右下角 找出…
题目链接:http://codeforces.com/problemset/problem/180/C 题意: 给你一个字符串s,长度为n. 让你将这个字符串变成“前面一段都是大写字母,后面一段都是小写字母”的形式. (也可以全是大写或全是小写) 问你最少改动几个字符. 题解: 表示状态: dp[i][0/1] = min changes 表示考虑到第i个字符,s[i]改成了大写(1)或小写(0)时的最小代价 找出答案: ans = min(dp[n][0], dp[n][1]) 如何转移: d…
题目链接:http://codeforces.com/problemset/problem/459/E 题意: 给你一个有向图,每条边有边权. 让你找出一条路径,使得这条路径上的边权严格递增. 问你这样的路径最长有多长. 题解: 先将所有边按边权从小到大排序,以保证边权递增. 表示状态: dp[i] = max len 表示以点i为终点时的最长路径长度. 找出答案: ans = max dp[i] 如何转移: 枚举每条边e[i],则有: dp[e[i].t] = max(dp[e[i].t],…
题目链接:http://codeforces.com/problemset/problem/163/A 题意: 给你两个字符串a,b,问你有多少对"(a的子串,b的子序列)"可以匹配. 题解: 表示状态: dp[i][j] = pairs a的子串以a[i]结尾,b的子序列以b[1 to j]结尾的方案数. 找出答案: ans = ∑ dp[i][lb] (la,lb代表a和b的长度) 如何转移: dp[i][j] = dp[i][j-1] if(a[i] == b[j]) dp[i]…
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2431 题意: 给定n,k,问你有多少个由1~n组成的排列,使得逆序对个数恰好为k个. 题解: 表示状态: dp[i][j] = num of sequences i:已经用了1~i之间的数(在这一步放了数字i) j:逆序对个数为j 找出答案: ans = dp[n][k] 如何转移: 在当前这一步要放数字i. 所以要将i插入一个由1~i-1组成的排列中. 若将i插入位置x(0 <= x…
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3398 题意: 约翰要带N(1≤N≤100000)只牛去参加集会里的展示活动,这些牛可以是牡牛,也可以是牝牛. 牛们要站成一排.但是牡牛是好斗的,为了避免牡牛闹出乱子,约翰决定任意两只牡牛之间至少要有K(0≤K<N)只牝牛. 请计算一共有多少种排队的方法.所有牡牛可以看成是相同的,所有牝牛也一样.答案对5000011取模. 题解: 表示状态: dp[i] = num of ways 表示考…
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2021 题意: John要建一个奶酪塔,高度最大为m. 他有n种奶酪.第i种高度为h[i](一定是5的倍数),价值为w[i]. 一块高度>=t的奶酪被称为大奶酪,一个奶酪如果在它上方有大奶酪(多块只算一次),它的高度就会变成原来的4/5. John想让他的奶酪他价值和最大,求这个最大值. 题解: 方法一: dp + 贪心. 贪心:如果奶酪塔中有大奶酪,则大奶酪一定放在最上面. (1)有大奶…