
------基础DP
文章平均质量分 76
fisty
hi
展开
-
【leetcode】55. Jump Game 动态规划解法
55. Jump GameGiven an array of non-negative integers, you are initially positioned at the first index of the array.Each element in the array represents your maximum jump length at that position.Determ...原创 2018-04-19 16:34:32 · 1177 阅读 · 1 评论 -
XHXJ's LIS HDU4352(数位DP)
为在[L, R]区间中, 组成数字严格上升并且长度为K的个数主要是状态的变化,这里用了状态压缩来压缩一个10位数, 对于1356 长度不变的情况下如果要插入4,更具O(nlgn)的LIS算法,会更新成1346, 是找到里面 a[i] > 4的第一个数,把他从原状态中去掉(s ^ (1 << i)) 再把x = 4 加上的情况 s‘ | (1 <<x) /********原创 2015-06-18 23:17:05 · 1181 阅读 · 0 评论 -
hdu3709 Balanced Number(数位dp)
求区间[L, R]内平衡数的个数 仍然采用 [0, R] - [0, L-1]的形式平衡数的定义是指,以某位作为支点,此位的左面(数字 * 距离)之和 与右边相等,距离是指某位到支点的距离;对于一个数4234 ,要枚举每一位为支点,判断这个数是否为平衡数。/*********************************************** * Author: fisty原创 2015-06-17 21:08:07 · 1622 阅读 · 2 评论 -
uva 10003 Cutting Sticks
题意:你的任务是替一家叫Analog Cutting Machinery (ACM)的公司切割木棍。切割木棍的成本是根据木棍的长度而定。 而且切割木棍的时候每次只切一段。 很显然的,不同切割的顺序会有不同的成本。 例如:有一根长10公尺的木棍必须在第2、4、7公尺的地方切割。 这个时候就有几种选择了。你可以选择先切2公尺的地方,然后切4公尺的地方,最后切7公尺的地方。这样的选择原创 2015-02-27 22:08:20 · 454 阅读 · 0 评论 -
最大矩阵子和
最优子矩阵是建立在数列连续最大和的基础上的。所谓最优子矩阵,就是指在一个n*m二维的矩阵中,确定一个小的矩阵,使这个小矩阵中所有元素的和最大。思考一下最优子矩阵和连续最大和的异同:1、 所求的和都具有连续性;2、 连续最大和是一维问题,最优子矩阵是二维问题另外,对于一个矩阵而言,如果我们将连续k行的元素纵向相加,并对相加后所得的数列求连续最大和,则此连续最大和就是一个行数为k的原创 2015-01-25 20:47:03 · 506 阅读 · 0 评论 -
Porcelain codeforce (背包)
E - PorcelainTime Limit:3000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64uSubmitStatusPracticeCodeForces 148EDescriptionDuring her tantrums the princess usually smash原创 2015-02-13 14:39:54 · 574 阅读 · 0 评论 -
CodeForces 69D Dot
CodeForces 69D Dot时间:2014-08-07 13:23:50 DescriptionAnton and Dasha like to play different games during breaks on checkered paper. By the 11th grade they managed to play all the g原创 2015-02-13 14:48:31 · 552 阅读 · 0 评论 -
Cut Ribbon codeforce
Cut RibbonTime Limit:2000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64uSubmitStatusPracticeCodeForces 189ADescriptionPolycarpus has a ribbon, its length is n. He want原创 2015-02-13 14:22:01 · 657 阅读 · 0 评论 -
You are given a tetrahedron.
You are given a tetrahedron.Let's mark its vertices with letters A,B, C andD correspondingly.An ant is standing in the vertex D of the tetrahedron. The ant is quite active and he wouldn't st原创 2015-02-13 14:23:35 · 1369 阅读 · 0 评论 -
uva11584 划分成回文串
d[i] 为1 ~i划分成最小回文串的个数,那么d[i] = min(dp[i], dp[j-1]+1 | [j ~ i] 是回文串)所以需要O(n^3)的时间/*********************************************** * Author: fisty * Created Time: 2015/2/12 18:09:05 * File Name原创 2015-02-12 22:46:55 · 496 阅读 · 0 评论 -
poj1651 矩阵链乘
以矩阵链ABCD为例按照矩阵链长度递增计算最优值矩阵链长度为1时,分别计算出矩阵链A、B、C、D的最优值矩阵链长度为2时,分别计算出矩阵链AB、BC、CD的最优值矩阵链长度为3时,分别计算出矩阵链ABC、BCD的最优值矩阵链长度为4时,计算出矩阵链ABCD的最优值动归方程:k为矩阵链断开的位置d数组存放矩阵链计算的最优值,d[i][j原创 2015-02-12 22:21:34 · 836 阅读 · 0 评论 -
uva11400
题目中要求为了省钱,可以 把一些灯泡换成电压更高的另一些灯泡来节省电源的钱。于是,就有了按照电压排序后的动态规划首先s[i]为前i种灯泡的数量之和,既L之和。然后定义 d[i]为1~i的最小花销,那么d[i] = min(d[i], d[j] + (s[i]-s[j]) * c[i] + k[i]);(j /*******************************原创 2015-02-12 22:33:04 · 838 阅读 · 0 评论 -
F-Logo Turtle codeforces
F - Logo TurtleTime Limit:2000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64uSubmitStatusPracticeCodeForces 132CDescriptionA lot of people associate Logo programming langu原创 2015-02-08 23:17:07 · 793 阅读 · 0 评论 -
UVa 116 - Unidirectional TSP
题目:给你一个n*m的数字表格,找到一条从左到右的路径,使得上面的数字和最小。 (每次可以从(i,j),走到(i,j+1),(i+1,j),(i-1,j)可以越界。)分析:因为要字典序最小,所以采用从右向左的方式dp; 状态:f(i,j)表示走到(i,j)的最小和,则有转移方程: f(i,j)= min(f(i+1,j+1原创 2015-02-07 22:01:47 · 410 阅读 · 0 评论 -
数位DP hdu 2089
有时候题目中需要求在区间[l, r],满足题意的个数,这时候就可以转化成[0, r] - [0, l)用dp[ i ][ j ] 先预处理当位数为i, 以j开头的数字符合题意的个数.dp[ i ][ j ] = dp[ i ][ j ] + dp[i - 1][ j ' ]对于r 或者l,从高位到低位枚举比他们小的所有数,把所有符合题意的加起来/******************原创 2015-02-08 23:02:01 · 425 阅读 · 0 评论 -
UVa 437. The Tower of Babylon
题意为输入若干种立方体(每种若干个),然后将立方体堆成一个塔,要求接触的两个面下底面的长宽分别严格大于上底面,求塔的最大高度。所以长方体有六种摆放方法,长宽互换也算,因为要求下底面的长宽严格大于上底面.之后按照下底面面积排序,根据两个面下底面的长宽分别严格大于上底面的条件寻找一个最长上升子序列就可以了。/*******************************************原创 2015-02-07 21:54:57 · 406 阅读 · 0 评论 -
codeforces 13C. Sequence
/*********************************************** * Author: fisty * Created Time: 2015/2/2 19:11:50 * File Name : A.cpp *********************************************** */#include #include #inc原创 2015-02-08 16:42:30 · 731 阅读 · 0 评论 -
hdu5421 小明系列问题——小明序列
题意:有多组测试数据,每组数据的n和d表示,有n个数,求相邻元素间距大于d的最长上升序列。(1正常的LIS输入第i个数时在处理完0到i-1的队列中找到一个合适位置把a[i]插入。本题有个限制条件d,所以每次只能在处理完0到i-d的队列中找到一个合适位置把a[i]插入,这样我们延缓更新队列即可,在处理第i个数据时,队列只需更新到a[i-d]的位置即可。/* *****************原创 2014-12-30 22:39:00 · 624 阅读 · 0 评论 -
lightoj 1017 - Brush (III) (DP)
Samir returned home from the contest and got angry afterseeing his room dusty. Who likes to see a dusty room after a brain stormingprogramming contest? After checking a bit he found a brush in his roo原创 2015-06-27 09:57:57 · 612 阅读 · 0 评论 -
lightoj 1422Halloween Costumes(区间dp)
dp[i][j]代表从区间i到区间j最少的穿衣数量,那么在dp[i][j]这个状态的穿衣数,就要等于dp[i+1][j]+1;也就是说,首先在不考虑它后面是否有一天要穿相同的衣服的情况下,它肯定会比区间i+1到j的衣服多出一件;然后,再考虑在这个区间范围,是否有一天要穿相同的衣服,i首先,第i天穿上一件衣服的结果已经得出,那么我们只需比较不穿衣服,那么就是dp[i][j]=min(dp[i原创 2015-06-10 09:27:56 · 526 阅读 · 0 评论 -
lightoj 1145 Dice (I) (DP)
1145 - Dice (I) PDF (English)StatisticsForumTime Limit: 2 second(s)Memory Limit: 32 MBYou have N dices; each of them has K facesnumbered from1 t原创 2015-10-11 23:01:09 · 2111 阅读 · 1 评论 -
lightoj 1050 - Marbles (概率DP)
思路:定义dp[i][j] 为 袋子中有i个红球和j个红球时获胜的概率那么根据题意我只可以任意拿而对手只拿蓝球。那么dp[i][j] = (拿到红球的概率) * dp[i-1][j-1] + (拿到蓝球的概率) * dp[i][j-2];边界:当红球没有时,获胜的概率为1注意点:T比较大,需要把所有数据预处理出来直接查询,否则超时/***********************原创 2015-08-23 15:19:20 · 1265 阅读 · 0 评论 -
lightoj1033 - Generating Palindromes (LCS)
题意:给你一个字符串,至少需要添加多少字符可以使得它变成一个回文串.思路 :设串S的反串为S‘那么strlen(S) - LCS(S, S')就是本问题的答案.如:S(原串) A b 3 b dS1(倒序串) d b 3 b ALCS b 3 b 所以,有3个字符已经配对,不用添加原创 2015-08-20 10:05:54 · 593 阅读 · 0 评论 -
lightoj 1036 - A Refining Company (dp)
题意:在一个m x n的地图里有金矿和银矿,当你在某个点(x, y)时, 你可以建造一个只能向西或者向北挖取矿石的履带车,金矿石只能被向北移动的履带车挖取,银矿石只能被向西移动的履带车挖取,并且履带车不能交叉。给出你每个地点的金矿和银矿的数量为你用履带车挖取的最大矿石数量是多少.(履带车会一直走到边界)思路:当你位于(x, y)时, 你只有两个操作:1)建立一个向北运输的履带车,挖一路原创 2015-08-20 10:22:02 · 1065 阅读 · 0 评论 -
lightoj 1032 - Fast Bit Calculations (数位DP)
记忆花搜索:dp[len][num][last] : 现在处理第len位,前面有num个11,并且最后一位为last。/*********************************************** * Author: fisty * Created Time: 2015-08-18 20:18:09 * File Name : 1032.cpp *********原创 2015-08-18 20:46:05 · 503 阅读 · 0 评论 -
lightoj 1031 - Easy Game
题解:在此游戏中任意时刻的状态都是原始序列的一段子序列故:定义d(i, j) : 表示原来序列的第i ~ j个元素组成的子序列,在双方都采取最优策略的情况下,先手得分的最大值、状态转移时,需要枚举从左边或者从右边取多少个。因此d(i, j) = sum[i, j] - min{d(i+1, j), d(i + 2, j).....d(j, j) , d(i, j-1), d(i原创 2015-08-18 11:50:49 · 819 阅读 · 0 评论 -
【数位DP】专题
所谓数位DP就是基于考虑数字的每一位来转移的DP。 例如求比456小的数,可以这么考虑, 4 5 6 4 5 (0~6) 4 (0~4) (0~9) (0~3)(0~9) (0~9)原创 2015-06-11 23:11:56 · 2441 阅读 · 0 评论 -
lightoj 1068 - Investigation (数位DP)
要求[l, r] 区间内有多少数符合两个条件:1)数可以整除k2)这个数的所有位之和可以整除k思路 : 数位dp其中一个参数存所有数位相加模k的值,另一个参数存这个当前数模k的值.当k > 90时,因为所有位之和最大为90,所以不存在整除k的值,直接输出0./*********************************************** * Author: f原创 2015-08-27 13:04:03 · 1246 阅读 · 0 评论 -
UVa 1347 Tour(DP)
题意:平面上有n个坐标均为正数的点,按照x坐标从小到大一次给出。求一条最短路线,从最左边的点出发到最右边的点,再回到最左边的点。除了第一个和最右一个点其他点恰好只经过一次。分析:可以等效为两个人从第一个点出发,沿不同的路径走到最右点。d(i, j)表示点1~max(i, j)这些点全部都走过,而且两人的位置分别是i和j,最少还需要走多长的距离。由这个定义可知,d(i, j) ==原创 2015-02-07 22:08:03 · 1121 阅读 · 2 评论 -
hdu5115 Dire Wolf(2014北京现场赛)
Dire WolfTime Limit: 5000/5000 MS (Java/Others) Memory Limit: 512000/512000 K (Java/Others)Total Submission(s): 687 Accepted Submission(s): 391Problem DescriptionDire wolves, also kn原创 2015-07-16 22:30:13 · 771 阅读 · 0 评论 -
lightoj 1044 Palindrome Partitioning(dp)
题意:给定字符串S,问可以划分的最小回文串数量思路:定义dp[i]为以i开头的字符串中回文串的最小划分数.dp[i] = min(dp[j] + 1 | i 边界,dp[i] = n-i+1./*********************************************** * Author: fisty * Created Time: 2015-08-22 09原创 2015-08-23 14:45:00 · 1190 阅读 · 0 评论 -
lightoj 1047 Neighbor House(Dp)
思路:定义dp[i][j] 为粉刷第i个房子用的颜色jdp[i][j] = min(dp[i-1][(j+1)%3] , dp[i-1][(j+2) % 3]);一共有三种颜色{0, 1, 2},任取一种颜色{j},那么和颜色j不同的颜色就为{(j + 1) % 3 , (j + 2) % 3};/********************************************原创 2015-08-23 14:50:23 · 1464 阅读 · 0 评论 -
lightoj 1025 The Specials Menu (DP)
Feuzem is an unemployed computer scientist who spends his days working at odd-jobs. While on the job he always manages to find algorithmic problems within mundane aspects of everyday life.Today, whi原创 2015-07-14 23:33:58 · 666 阅读 · 0 评论 -
poj Multiplication Puzzle(DP)
经典的区间DP模型--矩阵链乘的变换。我们从一开始一步步往后删很困难进行DP,那么从最后只剩两个也就是最左和最右时开始一步步增加就成功转换为经典的矩阵链乘了。一开始的区间是[i,j],那么我们可以选择i对于矩阵链乘的递推顺序不懂得可以看这篇文章http://blog.youkuaiyun.com/u013008291/article/details/43773433/***********原创 2015-06-10 09:34:05 · 482 阅读 · 0 评论 -
Zoj 3469 Food Delivery (DP
先把起始位置放到x坐标里面。然后从起始位置开始向左右送餐.设dp[i][j][k]表示从第i个人到第j个人都已经送完餐最后停在 k== 0 在左边,k == 1 在右边的最不满值。dp[i][j][0] 可能从dp[i+1][j][0],dp[i+1][j][1] (i+1在i右边,两个都在i左边)转移而来,dp[i][j][1]可能从dp[i][j-1][0],dp[i][j-1]原创 2015-06-08 23:04:15 · 533 阅读 · 0 评论 -
Lightoj 1009. K-based Numbers(DP)
1009. K-based NumbersTime limit: 1.0 secondMemory limit: 64 MBLet’s consider K-based numbers, containing exactlyN digits. We define a number to be valid if its K-based notation doesn’t con原创 2015-06-10 10:47:34 · 532 阅读 · 0 评论 -
poj 2955 Brackets(区间DP)
最大括号匹配数。如果找到一对匹配的括号[xxx]oooo,就把区间分成两部分,一部分是xxx,一部分是ooo,然后以此递归直到区间长度为1或者为2.状态转移方程:dp[i][j] = min(dp[i+1][j],dp[i+1][k-1]+dp[k+1][j]+1)(i/*********************************************** * Author: f原创 2015-06-10 09:18:30 · 508 阅读 · 0 评论 -
uva10534 LISDP
这题是要找一个最长(假设长度为2N-1)的子序列,使得前N个元素递增,后N个元素递减。一个找从前到后的上升子序列,另一个找从后到前的上升子序列(此时用的O(nlogn)的复杂度找的)。最后扫一遍,取两个状态之中较小的,即可找出最长的先上升后下降的子序列。之后 ans = max(ans, min(dp[i],dp[j]) * 2 - 1);全局数组在用的时候一定要初始化~~/* *******原创 2014-12-15 11:16:37 · 478 阅读 · 0 评论 -
Poj 1276 Cash Machine
多重背包,需用二进制处理成01背包求解,体积是硬币数量,价值是币值。/******************** * Author:fisty * Data:2014-11-24 * poj1279 * 分组背包 * ****************/ #include #include #include using namespace std;#define原创 2014-11-24 22:02:03 · 408 阅读 · 0 评论 -
Hdu 2639 Bone Collector II
求价值第K大的01背包问题,技巧是多加一维表示第k大时的价值,转移的时候用两个有序数列合并的方法不断更新第二维。原创 2014-11-08 13:16:24 · 460 阅读 · 0 评论