ACM 动态规划
文章平均质量分 53
Tuesday..
这个作者很懒,什么都没留下…
展开
-
SOJ 3531_Number Pyramids
【题意】给你一个给定数top及最底层元素个数n,构成一个以给top为塔尖,层数为n的如杨辉三角的金字塔,求有多少种【分析】最终种数其实只与最底层的n个数的组合数有关,上层的每个都数是由最底层数相加得来以层数4为例设最底层 x1,x2,x3,x4则第二层x1+x2,x2+x3,x3+x4第三层x1+2*x2+x3, x2+2*x3+x4最高层 x1+3*x2+3*x3+x4原创 2015-11-12 17:33:46 · 478 阅读 · 0 评论 -
POJ 1661 Help Jimmy【DP】
基础DP,过程想明白了其实也不复杂,从上面的推下面的比倒着推要简单很多。调试了半个多小时。。简单dp依然不能快速AC。。SAD。。题目链接:http://poj.org/problem?id=1661题意:Jimmy从坐标为x,高度为y的点向下跳,每次只能跳到平台上或者地面上,跳到平台上必须跑到平台边缘才能继续下跳。问最少多少时间跳到地面。分析:注意:对于每个平台左右两边都可以跳,需要分别记录最短原创 2016-04-05 11:30:36 · 838 阅读 · 2 评论 -
HDU 1074 Doing Homework【状态压缩DP】
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1074题意:给定作业截止时间和完成作业所需时间,比截止时间晚一天扣一分,问如何安排作业的顺序使得最终扣分最少?分析:最多只有15节课,可以将完成作业的情况进行状态压缩,用二进制表示,枚举出状态,进行dp。 然后注意要取字典序最小的。 dp最初忘记1<代码:#include<iostream>#inc原创 2016-04-04 11:10:50 · 557 阅读 · 0 评论 -
HDU 1024 Max Sum Plus Plus【DP,最大m子段和】
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1024题意:给定序列,给定m,求m个子段的最大和。分析:设dp[i][j]dp[i][j]为以第j个元素结尾的i个子段的和。 对于每个元素有和前一个元素并在一起构成一个子段,和单独开启一个子段两种可能,状态转移方程dp[i][j] = max(dp[i][j - 1], dp[i - 1][k]) +原创 2016-04-03 11:48:32 · 390 阅读 · 0 评论 -
POJ 2686_Traveling by Stagecoach【状态压缩DP】
题意:一共有m个城市,城市之间有双向路连接,一个人有n张马车票,一张马车票只能走一条路,走一条路的时间为这条路的长度除以使用的马车票上规定的马车数,问这个人从a出发到b最少使用时间。分析:状态压缩dp,用dp[i][j]dp[i][j]表示到达jj城市的最小时间,其中ii为剩余车票的集合。集合ii使用状态压缩的表示方法。由于剩余车票的集合不断变小,实际上为求DAG最短路问题。代码:#include<原创 2016-02-16 17:07:44 · 427 阅读 · 0 评论 -
占坑补题。。最近占的坑有点多。。。
Codeforces 659G Fence Divercity【计数DP】题目链接:http://codeforces.com/problemset/problem/659/G题意:分析:原创 2016-04-03 09:24:00 · 456 阅读 · 0 评论 -
Codeforces 621E Wet Shark and Block【dp + 矩阵快速幂】
题意:有b个blocks,每个blocks都有n个相同的0~9的数字,如果从第一个block选1,从第二个block选2,那么就构成12,问对于给定的n,b有多少种构成方案使最后模x的余数为k。分析:dp+矩阵快速幂。 假如现在的数是m,模x余数是n,那么再从下一个block中选一个数a,a模x余数为b,那么新的数的余数就为(m∗10+a)(m*10+a)%x,也就是(n∗10+b)(n*10+b原创 2016-02-18 10:19:45 · 598 阅读 · 0 评论 -
POJ 2411_Mondriaan's Dream
题意:用1*2和2*1的方块将给定长宽的矩形填满。问有多少种放法,对称的算两种。分析:状态压缩dp 首先用0表示前一行没有竖块占用这个位置,而1表示该位置和他上方的位置放了一个竖块,从而压缩状态。接下来一行一行的看,每一行都只受上一行的影响,同时影响着下一行的状态,那么如何将现在的状态和下一行的状态联系起来呢?令dp[i][j]dp[i][j]表示第i行状态为j时的方案数,直接把两个状态作为参数原创 2016-02-17 23:43:46 · 333 阅读 · 0 评论 -
POJ 1769_Minimizing maximizer
题意:一系列m个1~n区间,每个区间固定对某个子区间进行排序,顺序选择若干区间,使最终覆盖所有区间。分析: computes the length of the shortest subsequence of the initial sequence of sorters still producing correct results for all possible input data要想原创 2016-02-17 14:44:49 · 1086 阅读 · 0 评论 -
HDU 5642 King's Order【数位dp】
题目链接:http://bestcoder.hdu.edu.cn/contests/contest_showproblem.php?cid=677&pid=1003题意:求长度为n的序列中,每个字符(a~z)连续出现不超过3次的种数。分析:数位dp,设dp[i][j]dp[i][j]表示进行到第ii个字符,其中当前字符出现jj次,然后每次状态转移一下就好了~代码:#include <cstdio>原创 2016-03-13 09:07:30 · 489 阅读 · 0 评论 -
POJ 1015 Jury Compromise【DP】
罗大神说这题很简单,,,,然而我着实写的很难过。。。题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=110495#problem/K题意:给定n个人对罪犯的d值和p值,从中选m个人使得d的和与p的和差的绝对值最小,如果有多种情况则输出d的和与p的和最大的,并升序输出选择的人的编号。分析:这题是既要考虑差又要考虑和。刚看见有点懵逼。原创 2016-04-07 15:33:32 · 507 阅读 · 0 评论 -
BZOJ 1415 [Noi2005]聪聪和可可【概率dp】
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1415题意:给定无向图,以及聪聪和可可的初始位置。聪聪要抓可可,聪聪先走,可可后走。聪聪一个单位时间内可以走一到两步,每次都是选择最靠近可可的点走,如果有多个距离可可相同的点则选择标号最小的。可可单位时间只能走一步,并且等概率的选择附近相邻的点或者呆在原地不动。问平均聪聪走多少个单位时间可以追原创 2016-08-02 10:21:42 · 1246 阅读 · 0 评论 -
HDU 4778 Gems Fight!【博弈+DP】
这个题真的想得超级久都没有思路,想明白了又因为位运算少加个括号调试了将近一个小时,大家都秒出的题我又基本是最后几个交的。今天各种智商不在线。伤心难过受打击。。题意:有B(0≤B≤21)B(0\le B \le 21)个背包,有G(0≤G≤8)G(0 \le G \le 8)种颜色的宝石,这两个人轮流选择某一个背包,把这个背包包里的宝石放到一个共享的地方里,当这里某一种颜色的宝石等于SS,那么就可以产原创 2016-07-11 20:59:02 · 604 阅读 · 0 评论 -
BZOJ 1026 [SCOI2009]windy数【数位DP】
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1026题意:windy定义了一种windy数。不含前导零且相邻两个数字之差至少为2的正整数被称为windy数。 windy想知道, 在A和B之间,包括A和B,总共有多少个windy数?分析:比较基础的数位dp, 设dp[i][j][k][m]dp[i][j][k][m],其中kk标记是否与原创 2016-07-19 08:29:32 · 564 阅读 · 0 评论 -
Codeforces 622C Not Equal on a Segment 【线段树 Or DP】
题目链接:http://codeforces.com/problemset/problem/622/C题意:给定序列,若干查询,每个查询给定区间和tt,输出区间内任意一个不等于tt的元素的位置。分析:最初没看样例直接钦定输出每个不等于tt的元素位置,结果怎么想都是n2n^2复杂度的,后来看了样例才发现是输出任意一个。。 对于一个区间,如果区间最大值和最小值相等,那么该区间元素值全部相同,那么我们维原创 2016-07-06 22:49:17 · 589 阅读 · 0 评论 -
UVA 10635 Prince and Princess【LCS 问题转换为 LIS】
题目链接:http://acm.hust.edu.cn/vjudge/problem/visitOriginUrl.action?id=19051题意:有两个长度分别为p+1p+1和q+1q+1的由1到n21到n^2之前的整数组成的序列,每个序列的元素各不相等,两个序列第一个元素均为1。求两个序列的最长公共子序列。分析:LCSLCS的复杂度为O(n2)O(n^2),这题n最大为250 * 250,必原创 2016-06-18 21:19:19 · 602 阅读 · 0 评论 -
CDOJ 1217 The Battle of Chibi【树状数组+dp】
题目链接:http://acm.uestc.edu.cn/#/problem/show/1217题意:给定长度为n的序列,求长度为m的严格上升子序列个数。分析:dp 状态转移方程:枚举长度和他前面的比他小的元素进行状态的转移,时间复杂度O(n3)O(n^3)。 采用树状数组进行优化,我们就可以O(logn)O(logn)获得他前面比他小的元素的长度为ii的上升序列个数。 由于a[i]a[i]很原创 2016-05-19 15:37:54 · 387 阅读 · 0 评论 -
SGU 104 Little shop of flowers【DP】
浪(吃)了一天,水道题冷静冷静….题目链接:http://acm.sgu.ru/problem.php?contest=0&problem=104题意:给定每朵花放在每个花盆的值,编号大的花只能放在编号小的花的后面,每朵花都要放到花盆里,问如何放才能使得总值最大?分析:还是一道比较水的dp… 每个位置有两种情况:放与不放。 不放的话dp[i][j][0]dp[i][j][0]就等于前面最近的放了原创 2016-04-29 21:33:53 · 450 阅读 · 0 评论 -
POJ 3666 Making the Grade【DP】
读题堪忧啊,敲完了才发现理解错了。。理解题必须看样例啊!!题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=110495#problem/S题意:给定序列,做出最少的改变,使得新的序列单调非增或者或单调非减。分析:先考虑单调非增。 如果后一个元素比前一个小,那么最少改变的情况就是让他和前一个元素相等。如果比前一个元素大或者相等,则原创 2016-04-07 16:29:13 · 368 阅读 · 0 评论 -
Codeforces 404D Minesweeper 1D
题意:给定字符串,其中’*’表示地雷,’1’表示左/右边有一个地雷相邻,’2’表示左右两边均有地雷相邻,’0’表示左右均无地雷相邻,’?’表示待定,可填入0,1,2或者地雷,有多少种表示方法使字母串满足规定。分析:不难想到用dp[i][j]dp[i][j]其中j为0,1,2,3(即四种状态),表示下标为i的元素为j状态时,前i+1个字符满足规定的种数。起初这样做,每次都还需要对前一个元素为’1’时进原创 2016-02-03 18:51:27 · 667 阅读 · 0 评论 -
POJ 3734_Blocks
题意:用红绿蓝黄四种颜色对一序列n个方块涂色,求出绿和红色方块数同时为偶数的染色方案数。mod=10007mod=10007分析:dp+矩阵快速幂 首先明确有三种状态:红和绿均为偶数红和绿只有一个为奇数红和绿均为奇数设前三种方案数分别为aia_i,bib_i,cic_i,则可以得到以下递推式: ai+1=2∗ai+bibi+1=2∗ai+2∗bi+2∗cici+1=2∗cia_{i+1}原创 2016-02-16 21:22:57 · 556 阅读 · 0 评论 -
SOJ 2749_The Fewest Coins
【题意】:已知整个交易系统有N (1 ≤ N ≤ 100)种不同的货币,分别价值V1,V2,V3.......VN(1 ≤ Vi ≤ 120),FJ分别有C1,C2,C3.....CN(0 ≤ Ci ≤ 10,000)张相应价值货币。FJ只能用仅有的货币去买价值T(1 ≤ T ≤ 10,000)分的东西,而老板有无数的货币可以找给他。求FJ给老板的货币数+老板找给FJ的货币数的最小值。原创 2015-10-31 13:48:08 · 498 阅读 · 0 评论 -
UVA 1025_A Spy in the Metro
【题意】一个人从站台1出发,乘车要在时刻T到达站台n,为使在在站台等车时间最短,她可以选择乘坐两个方向的列车,并在客车停靠站的时候换车。【分析】每次停站下车时,她都有三种选择,1.原地不动 2.搭乘向右的车 3.搭乘向左的车。d[i][j]表示在时刻i时,在站台j的最少等车时间由此得状态转移方程:如果有向右的车:d[i][j]=min(d[i][j],d[i+t[j]][j+1]);原创 2015-11-28 11:03:25 · 475 阅读 · 0 评论 -
SOJ 2930_积木城堡
【题意】若干个城堡,给定每个城堡的积木数及每块积木的棱长。从城堡中抽出积木使每块城堡高度相同,求最大高度【分析】城堡的积木选择可以看成01背包问题,从最矮的城堡高度开始递减枚举,求出使每个城堡都能装满的最大高度。【代码】#include#include#include#includeconst int INF=0x3fffffff;const int maxn=110;in原创 2015-11-24 00:41:51 · 571 阅读 · 1 评论 -
SOJ 2785_Binary Partitions
【题意】将一个数用二进制数表示,求一共有多少种表示方法。【分析】思路一:完全背包:原创 2015-11-07 14:00:01 · 430 阅读 · 0 评论 -
SOJ 2800_三角形
【【【【要晕过去的一道题【题意】多个黑白三角形组成的倒三角,求白三角形组成的最大倒三角的面积【分析】【代码】#include#include#include#includetypedef long long ll;using namespace std;const int INF=0x3fffffff;int a[1100][2500];int v[1100][25原创 2015-11-16 11:47:20 · 548 阅读 · 0 评论 -
UVa 12563_Jin Ge Jin Qu hao
【题意】在KTV唱歌,假设每首歌最长180s,时间结束时如果还有歌正在唱,则将此歌唱完。为使唱歌时间最长,规定最后唱长达678s的《劲歌金曲》【介是个嘛?】假设你正在唱KTV,在剩余的t秒时间里,在给定时长的n首歌里(不包括劲歌金曲),要尽可能的多唱。即 在唱的总曲目尽量多的前提下,尽量晚的离开KTV。求唱的总曲目及唱的时间总长度。【分析】01背包先求最大的曲目数,再在此前提下求从最后遍历原创 2015-11-07 20:04:08 · 505 阅读 · 0 评论 -
SOJ 2818_QQ音速
【题意】两只手,一次只能用一只手按一个键子(0,1,2,3),给出从i键到j键所需的消耗的体力,求依次按下一系列键子所需最小体力。【分析】法一:开一个三维数组,分别记录移动到位置及左右手按的键子。状态转移方程; v[k][i][j]=min(v[k-1][c[k-1]-'0'][j]+w[c[k-1]-'0'][i],v[k-1][i][c[k-1]-'0']+w[c[k-1]-'原创 2015-11-23 10:06:14 · 647 阅读 · 0 评论 -
SOJ 3300_Stockholm Coins
【题意】给n个数,求一个数,使这个数能且只能由(n个数每个至少出现一次)表示。输出满足条件的最小的数。【分析】如果有满足条件的最小的数,那么这个数只能是这n个数的和total,通过记录每个可能和的组合数,求出total的组合数,如果为1则表示满足条件,即n个数每个正好出现一次,若>1,则找不到这样的数,即输出-1【代码】#include#include#includeusing原创 2015-11-09 21:15:40 · 418 阅读 · 0 评论 -
UVA 11400_ Lighting System Design
题意:给定一系列灯泡的额定功率,电源价钱,一个灯泡的价格以及系统所需该种灯泡的数量。已知流过灯泡的电流相等,所以为省钱可以将电压小的灯泡换成电压大的灯泡,但是不能换成电压更小的灯泡,问最少要花多少钱。分析:首先要明确:只要是电压大的比电压小的便宜,就一定要用大的替换小的灯泡。替换必须是全部替换,不能替换一部分,即用某一种大的替换某种小的全部的灯泡。反正替换的灯泡个数没有限制,为什么不尽可能多的把原创 2016-02-08 01:33:21 · 368 阅读 · 0 评论 -
Codeforces 629D Babaei and Birthday Cake(线段树优化dp)
题意:nn个蛋糕编号从小到大编号,jj号蛋糕可以放在ii号上面,当且仅当jj的体积严格大于ii且i<ji<j,问最终可得的最大蛋糕体积。分析:实质为求最长上升子序列问题,设dp[i]dp[i]从头开始到第i位的最长子序列长度,可以想到O(n2)O(n^2)的做法,状态转移方程:dp[i] = max(dp[j], j >= 0&& j < i && v[j] < v[i]) + v[i];但是nn可原创 2016-03-01 13:16:07 · 554 阅读 · 0 评论 -
Codeforces 629C Famil Door and Brackets
题意:给定长度为m的序列s,求一共有多少对p,q,使得:p+s+q长度为n,且’(‘数与’)’数相等。p+s+q的任意前缀’(‘数比’)’数多。其中s,p,q均为’(‘和’)’组成的序列。分析:设dp[i][j]dp[i][j]为长度为ii的序列中’(‘比’)’多的个数为jj的情况数,很容易想到时间和空间复杂度均为O(n∗(n−m))O(n*(n-m))的方法。但是如果p+sp+s中’(‘比’原创 2016-03-03 13:27:04 · 408 阅读 · 0 评论 -
UVA 10564_ Paths through the Hourglass
题意:由0-9的数字组成一个形如沙漏的图形,要求从第一行开始沿左下或者右下到达最后一行,问有多少种不同的路径,是最后路径上的整数之和为给定的某个数。分析:简单计数dp,从最后一行开始,设dp[i][j][k]dp[i][j][k]为从下往上已经走过i行,走到第j列,此时路径上的整数之和为k的路径种数。得到递归方程:dp[i][j][k] += dp[i-1][j][k-a[i][j]] +dp[i-原创 2016-02-02 18:33:34 · 358 阅读 · 0 评论 -
UVA 674_Coin Change
题意:给定一个数,求用1,5,10,25,50有多少种组合方式。分析:简单计数dp,注意dp[i][0]dp[i][0]初始化为1,因为一个元素也不选的方法总是有一种。代码:#include<iostream>#include<cstring>using namespace std;const int maxn =10005;long long dp[10][maxn];int main原创 2016-02-02 10:47:45 · 319 阅读 · 0 评论 -
UVA 116_ Unidirectional TSP
题意:给定整数矩阵,从第一列的任何一个位置出发,每次可以向右、右上、右下走一个格,将最后一行和第一行看成是邻接的,最终到达最后一列,路径长度为所经过格中的整数之和,求最小路径, 答案不唯一,输出字典序最小的路径。分析:数组dp[i][j]记录从第i行第j列出发,到达最后一列的最小路径长度每个阶段都有三种决策,向右/右上/右下【注意最后一行和第一行的情况字典序最小,每次先都选择字典序较小的决策打原创 2016-01-31 19:32:49 · 344 阅读 · 0 评论 -
UVA 437_The Tower of Babylon
题意:一堆石头,给定长宽高,每种石头均可以使用无数次,问这堆石头可以叠放的最高高度,要求下面的石头的长和宽分别严格大于上面石头的长和宽。分析:采用DAG最长路算法,由于长宽较大,不能直接用于表示状态,因此采用d[i][x]表示以第i块石头为最高点,以其第x个边为高所能达到的最大高度,其中i为石头标号,x代表长/宽/高,然后根据长宽高要求构造DAG,最后记忆化搜索求出最长路。代码:#include<i原创 2016-01-27 17:15:59 · 482 阅读 · 0 评论 -
UVA 1347_Tour
题意:给定一系列按x坐标升序排列的点,一个人从左向右走到终点再从终点走回起点,要求每个点恰好经过一次,问所走过的最短路径长度。分析:可以看成是两个人同时从起点向终点走,且除起点终点外每个点恰有一个人经过。 John uses the following strategy: he starts from the leftmost point, then he goes strictly left原创 2016-01-31 15:37:17 · 449 阅读 · 0 评论 -
【动态规划】最长上升子序列(LIS)
今天看了《挑战程序设计竞赛》的动态规划部分,感觉对以前一些知其然却不知其所以然的问题有了更好的理解,先整理一部分。题意:有一个长为n的数列a0,a1,a2,...,ana_0,a_1,a_2,...,a_n 。请求出这个序列中最长的上升子序列的长度。上升子序列指的是对于任意的i<ji<j都满足ai<aja_i<a_j的子序列。分析:设dp[i]dp[i]为第i个下标之前第i个下标之前的子串中最长上升原创 2016-02-01 21:46:43 · 641 阅读 · 0 评论 -
Codeforces 629D Babaei and Birthday Cake(树状数组优化dp)
题意:线段树做法分析:因为每次都是在当前位置的前缀区间查询最大值,所以可以直接用树状数组优化。比线段树快了12ms~代码:#include<cstdio>#include<cmath>#include<iostream>#include<algorithm>using namespace std;//[)const int maxn = 100005, INF = 0x3fffffff;原创 2016-03-01 20:14:07 · 420 阅读 · 0 评论 -
Codeforces 628D Magic Numbers
题意:求[a,b][a,b](a,ba,b不含前导0)之间的d−magicd-magic数中mm的倍数的个数。分析:计数dp Let’s call a number d-magic if digit d appears in decimal presentation of the number on even positions and nowhere else.仔细读题并观察例子就可以明确d原创 2016-02-22 10:21:28 · 400 阅读 · 0 评论