动态规划
文章平均质量分 69
mosquito_zm
这个作者很懒,什么都没留下…
展开
-
hdu4771 Stealing Harry Potter’s Precious(状态压缩+bfs)
题意:给出一个图,求出经过所有给定点(<=4个)的最短路径。 题解:由于给定点很少,可以进行状态压缩,然后包里搜索即可。#include <cstdio>#include <iostream>#include <algorithm>#include <queue>#include <cstring>using namespace std;const int maxn = 100+10;原创 2016-08-21 12:02:52 · 403 阅读 · 0 评论 -
动态规划优化整理
1.四边形优化 m(i, j)状态方程满足:i i = j: 0i > j: INF对于i 令s(i, j)为对应决策变量的最大值,即m(i, j)通过s(i, j)达到最优, 并且s(i, j)最大s(i, j) = MAX(i如果m(i, j)满足四边形定理, 则s(i, j) 于是m(i, j) = MIN(s(i, j-1) 2.斜率优化此处以d转载 2017-07-07 13:25:25 · 342 阅读 · 0 评论 -
数位dp总结 之 从入门到模板
来源:http://blog.csdn.net/wust_zzwh/article/details/52100392基础篇数位dp是一种计数用的dp,一般就是要统计一个区间[le,ri]内满足一些条件数的个数。所谓数位dp,字面意思就是在数位上进行dp咯。数位还算是比较好听的名字,数位的含义:一个数有个位、十位、百位、千位......数的每一位就是数位啦!之所以要引入数转载 2017-07-17 13:56:08 · 575 阅读 · 0 评论 -
scu oj 4441 Necklace(dp+树状数组)(*)
题目链接Necklacefrog has n gems arranged in a cycle, whose beautifulness are a1,a2,…,an. She would like to remove some gems to make them into a beautiful necklace without changing their relative转载 2017-08-01 09:44:26 · 277 阅读 · 0 评论 -
poj3071 概率dp
由题可知,本题为概率dp。d[i][j] 表示第i个人从第j轮晋级的概率。 则dp[i][j] = ∑〖dp[k][j-1] * p[i][k]〗* dp[i][j-1],其中k为在当前轮次所有可能与i交手的对手。上式表示本轮中于每一个可能的对手的出现概率与胜率乘积再乘上本人晋级本轮的概率。最后答案只要找到最大值即可。 代码如下:#include <cstdio>#include <iost原创 2017-07-23 14:25:05 · 231 阅读 · 0 评论 -
Codeforces 835D Round #427 D-Palindromic characteristics—— DP+回文串
注意:凡是可以用O(n^2)算法求回文串时候,都可以用dp求解。dp[i][j] = (s[i] == s[j]) ? dp[i + 1][j -1] : 0(即当前两端是否相等,若相等,则只取决于中间是不是回文串)。预处理的时候,只需要令所有的dp[i][i] = 1,dp[i][i - 1] = 1(方便转移)即可。题解:Observation I.If the str原创 2017-08-07 17:10:02 · 242 阅读 · 0 评论 -
Educational Codeforces Round 19 F(dp+队列优化)
网址:http://codeforces.com/contest/797/problem/F显然,要先排序。我们可以先处理出所有老鼠到所有洞的距离,p[i][j]表示第j只老鼠到第i个洞的距离。由于我们每次求的时候都是一段区间的老鼠到一个洞中,所以我们可以通过求前缀和优化计算。对于p[i][j],其前缀和为d[i][j],表示前j只老鼠都进入i洞中所需要的花费。在实际运算中,因为我原创 2017-07-07 12:42:10 · 352 阅读 · 0 评论 -
Codeforces346B Lucky Common Subsequence(KMP+dp)
题目链接题解:对于LCS问题,我们的正解是用dp解决。而本题目中还有了一个数组是不能够包含的,所以我们可以给dp新增加一维。dp[i][j][k]表示A串前长度为i的子串,B串前长度为j的子串,能匹配到的C串的最长位置为k时的最长长度。转移时,与LCS问题类似。对于k的转移,就是要判断当前为是否可以继续匹配到C中k的下一位中去,如果可以,就加1,不可以,就根据失配函数进行转移,知道可以原创 2017-07-15 12:29:55 · 432 阅读 · 0 评论 -
hdu4507(数位dp,较复杂)
这题麻烦就是要求数的平方和。我们先考虑求和的问题,一个区间,数位dp能在一些约束下计数,现在要这些数的和。其实组合数学搞搞就可以了:如 现在枚举的某一位pos,我统计了这一位枚举i的满足条件的个数cnt,其实只要算i对总和的贡献就可以了,对于一个数而已第pos位是i,那么对求和贡献就是i*10^pos,就是十进制的权值,然后有cnt个数都满足第pos位是i,最后sum=cnt*i*10^pos转载 2017-07-04 22:45:55 · 450 阅读 · 0 评论 -
HDU 3709 数位dp
本题只需枚举中轴位置,然后数位dp即可PS:注意00,000这些都不能算进去,要单独去掉(因为在不同的中轴线下,这些数会算多次0,导致结果错误)#include using namespace std;#define ll long longconst ll maxn = 20;ll dp[maxn][4000][maxn];ll a[maxn];ll dfs(int pos,原创 2017-07-04 16:09:07 · 228 阅读 · 0 评论 -
POJ 3252(数位dp,前导0)
这题的约束就是一个数的二进制中0的数量要不能少于1的数量,通过上一题,这题状态就很简单了,dp[pos][num],到当前数位pos,0的数量减去1的数量为num的方案数,一个简单的问题,中间某个pos位上num可能为负数(这不一定是非法的,因为我还没枚举完嘛,只要最终的num>=0才能判合法,中途某个pos就不一定了),这里比较好处理,Hash嘛,最小就-32吧(好像),直接加上32,把32当0原创 2017-07-04 16:06:19 · 800 阅读 · 0 评论 -
HDU 4734(数位dp)
题目给了个f(x)的定义:F(x) = An * 2n-1 + An-1 * 2n-2 + ... + A2 * 2 + A1 * 1,Ai是十进制数位,然后给出a,b求区间[0,b]内满足f(i)常规想:这个f(x)计算就和数位计算是一样的,就是加了权值,所以dp[pos][sum],这状态是基本的。a是题目给定的,f(a)是变化的不过f(a)最大好像是4600的样子。如果要mems转载 2017-07-04 16:04:10 · 243 阅读 · 0 评论 -
HDU 2089 (数位dp)
入门题。就是数位上不能有4也不能有连续的62,没有4的话在枚举的时候判断一下,不枚举4就可以保证状态合法了,所以这个约束没有记忆化的必要,而对于62的话,涉及到两位,当前一位是6或者不是6这两种不同情况我计数是不相同的,所以要用状态来记录不同的方案数。dp[pos][sta]表示当前第pos位,前一位是否是6的状态,这里sta只需要去0和1两种状态就可以了,不是6的情况可视为同种,不会影响计数原创 2017-07-04 16:02:14 · 372 阅读 · 0 评论 -
BestCoder #92 C (dp)(要学会表示状态啊)
题目链接以下几段摘自官方题解:大家要学会分析状态啊喂!多思考多开脑洞,分析出状态之后,就是一个DP或者记忆化搜索,自然就可以写出来啦!首先,因为字符不是'2'就是'3',所以我们可以把字符串当做一个全部都是'3'的串,然后有若干的'2'插入到了某些位置。显然,我们交换相邻的'2'与'2'或者相邻的'3'与'3'是没有意义的,我们只会进行相邻'2'与'3'之间的交换。原创 2017-04-16 15:10:42 · 320 阅读 · 0 评论 -
hdu 1024 最大M子段和 Max Sum Plus Plus(dp)(中等难度)
hdu 1024 最大M子段和 转载▼ Max Sum Plus Plus Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 4521 Accepted Submission(s): 1476Problem Descrip转载 2016-08-11 20:59:42 · 439 阅读 · 0 评论 -
hdu 4778 Gems Fight! (状态压缩dp+博弈)
题目链接:题目链接题意: 有 G 种颜色的宝石,放在 B 个袋子里(每种颜色可以放多个)。 两人轮流选袋子(每个袋子只能被选 1 次),每次将选出来的袋子中的宝石放到 cooker 中,cooker 可能会起反应。 反应条件是 cooker 中出现 S 个一样颜色的宝石,而且一旦起反应,每 S 个一样颜色的宝石就会获得 1 个魔法石(同时反应)。 作为奖励,每次反应结束后当前玩家可以再选一个原创 2016-08-21 10:50:53 · 349 阅读 · 0 评论 -
HDU4597:Play Game(记忆化搜索(dp))(博弈)
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 turns to pick up the top or bottom card from either pile, and the sc原创 2016-08-21 13:58:57 · 441 阅读 · 0 评论 -
Codeforces Round #428 (Div. 2) E 推理+求最大团(中途相遇法)(状态压缩)(代码能力)
题目链接答案:Lemma : Let G be a simple graph. To every vertex of G we assign a nonnegative real number such that the sum of the numbers assigned to all vertices is 1. For any two connected vertice原创 2017-08-14 22:19:02 · 357 阅读 · 0 评论