随笔分类 -  动态规划,递推

摘要:问题是求一个方案,实际隐含一个dp。法力是递减的,所以状态是DAG,对于一个确定的状态,我们贪心地希望英雄的血量尽量大。分析:定义状态dp[i][p][h]表示是已经用了i的法力值,怪兽的位置在p,怪兽的总血量为h时候英雄所具有的最大血量,采用刷表法,决策有:使用雷击,h变成h-L[p],p变成ma... 阅读全文
posted @ 2015-09-04 23:03 瑞宇 阅读(275) 评论(0) 推荐(0)
摘要:D. Minimizationtime limit per test2 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputYou've got array A, consisting of... 阅读全文
posted @ 2015-08-23 18:47 瑞宇 阅读(349) 评论(0) 推荐(0)
摘要:状压dp,每个状态可以表示为一个n元组,且上限为8,可以用一个九进制来表示状态。但是这样做用数组开不下,用map离散会T。而实际上很多九进制数很多都是用不上的。因此类似uva 1601 Morning after holloween的思想,先dfs预处理出所有状态,用map将状态离散,预处理出算出状... 阅读全文
posted @ 2015-08-22 18:48 瑞宇 阅读(362) 评论(0) 推荐(0)
摘要:状压dp,用s表示已经询问过的特征,a表示W具有的特征。当满足条件的物体只有一个的时候就不用再猜测了。对于满足条件的物体个数可以预处理出来转移的时候应该枚举询问的k,因为实际上要猜的物品是不确定的,要么k是W所具有的,要么k不是W所具有的,要保证能猜到那么就应该取最坏情况下的最小值,所以有转移方程:... 阅读全文
posted @ 2015-08-21 19:38 瑞宇 阅读(428) 评论(0) 推荐(0)
摘要:题目:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=20&page=show_problem&problem=1758状态压缩的DP,dp[i][st]表示状态为st考虑后面i个人所有人最... 阅读全文
posted @ 2015-08-20 22:28 瑞宇 阅读(273) 评论(0) 推荐(0)
摘要:先把线按照距离原点的距离排序,然后用叉积把在同一条直线上的点放在一起,把在同一条线上的点中的前i个点当成一个点就转化成了分组背包。写if(kas++) putchar('\n') 居然PE了,PE选手#includeusing namespace std;int N,T;const int maxn... 阅读全文
posted @ 2015-08-20 18:33 瑞宇 阅读(243) 评论(0) 推荐(0)
摘要:求一棵数的最大独立集结点个数并判断方案是否唯一。dp[i][j]表示以i为根的子树的最大独立集,j的取值为选和不选。决策:当选择i时,就不能选择它的子结点。当不选i时,它的子结点可选可不选。判断唯一性:当选择的某个子节点方案不唯一,父节点的方案就不唯一,或者某个子节点选或不选方案数一样。转移顺序:按... 阅读全文
posted @ 2015-08-19 23:25 瑞宇 阅读(188) 评论(0) 推荐(0)
摘要:区间dp,切割dp[i][j]的花费和切法无关(无后效性)dp[i][j]表示区间i,j的花费,于是只要枚举切割方法就行了,区间就划分成更小的区间了。O(n^3)四边形不等式尚待学习#include //变量不要取成ignore left之类using namespace std;const int... 阅读全文
posted @ 2015-08-18 23:47 瑞宇 阅读(298) 评论(0) 推荐(0)
摘要:dp[i][j]表示前一个序列拿了i个颜色,后一个序列拿了j个颜色的最小花费。转移的时候显然只能向dp[i+1][j],或dp[i][j+1]转移,每增加拿走一个颜色,之前已经出现但没结束的颜色个数的跨度都增加1,为了在转移的时候快速算出这个值,先预处理出每个颜色在各个序列中的起始和终止位置。mem... 阅读全文
posted @ 2015-08-18 23:06 瑞宇 阅读(361) 评论(0) 推荐(0)
摘要:http://codeforces.com/gym/100650概要:给出一个缩写,和一些单词,从单词中按顺序选一些字母作为缩写,问方案数。限制:某些单词要忽略,每个单词至少要选一个字母。dp[i][j]表示到第i个单词的时候已经选了j个字母的方案数。很明显,当前字符ch是第j个字符的时候,第j-1... 阅读全文
posted @ 2015-08-18 22:17 瑞宇 阅读(352) 评论(0) 推荐(0)
摘要:坑,一开始以为,分成两半的时候去最大那个就行了,实际上这样是不对的,因为有可能出现小的一半的时间比大的要长,因为还和等待次数有关,且转移的时候需要用到次数更小的状态,所以状态定义为二维,dp[i][j]表示长度为i的区间,放小于等于j次的概率。要求确切的某次的概率,比如k,就只要用dp[i][k]-... 阅读全文
posted @ 2015-08-13 22:02 瑞宇 阅读(372) 评论(0) 推荐(0)
摘要:首先是一个贪心,一种灯泡要么全都换,要么全都不换。先排序,定义状态d[i]为前面i种灯泡的最小花费,状态转移就是从d[j],jusing namespace std;const int maxn = 1e3+3;int V[maxn], K[maxn], C[maxn], L[maxn];int d... 阅读全文
posted @ 2015-08-13 11:24 瑞宇 阅读(240) 评论(0) 推荐(0)
摘要:d[i]表示前面i个字符划分成的最小回文串个数,转移:当第i字符加进来和前面区间j构成回文串,那么d[i] = d[j]+1。要判断前面的字符j+1到i是不是回文串,可以用Manacher算法预处理出来。(其实O(n^2)判断回文串的也可以,时间复杂度不会变,只是为了学习ManacherManach... 阅读全文
posted @ 2015-08-13 11:21 瑞宇 阅读(262) 评论(0) 推荐(0)
摘要:分阶段的DAG,注意字典序的处理和路径的保存。定义状态d[i][j]为从i,j 出发到最后一列的最小花费,转移的时候只有三种,向上,向下,或平移。#includeusing namespace std;const int maxm = 11;const int maxn = 101;int G[ma... 阅读全文
posted @ 2015-08-13 10:44 瑞宇 阅读(397) 评论(0) 推荐(0)
摘要:TSP是NP难,但是把问题简化,到最右点之前的巡游路线只能严格向右,到最右边的点以后,返回的时候严格向左,这个问题就可以在多项式时间内求出来了。定义状态d[i][j]表示一个人在i号点,令一个人在j号点,之前的点全走过到终点还要走的最小长度,为了区别d[i][j]和d[j][i]规定i>j,然后考虑... 阅读全文
posted @ 2015-08-12 20:06 瑞宇 阅读(259) 评论(0) 推荐(0)
摘要:据说是DAG的dp,可用spfa来做,松弛操作改成变长。注意状态的表示。影响决策的只有顶部的尺寸,因为尺寸可能很大,所以用立方体的编号和高的编号来表示,然后向尺寸更小的转移就行了。#includeusing namespace std;#define MP make_pair#define fi f... 阅读全文
posted @ 2015-08-11 23:58 瑞宇 阅读(211) 评论(0) 推荐(0)
摘要:题意:给一个nXm的矩阵,上面有一些数字,从左上角出发,每次只能往右或者往下,把沿途的数字加起来,求到达右下角的最大值是多少。题解:简单的一个dp,设f[i][j]为到达i行j列的最大值,f[i][j] = max(f[i-1][j],f[i][j-1])+a[i][j],然后用队列刷表法。#inc... 阅读全文
posted @ 2015-07-27 18:28 瑞宇 阅读(284) 评论(0) 推荐(0)
摘要:题意:给你n个点,将这些点放在一个环上,问你不相交的连k条线的方案数。(没有重点)题解:dp[i][j]表示i个点连j条线的方案数,那么新加一个点i,情况1,i没有和之前的点相连,方案数为dp[i-1][j];情况2,i和p号点相连(0#include#include#include#include... 阅读全文
posted @ 2015-07-25 16:42 瑞宇 阅读(336) 评论(0) 推荐(0)
摘要:题意,给一个数字矩阵,要求从上往下的一条路径,使这条路径上数字之和最小,如有多条输出最靠右的一条。数字三角形打印路径。。。一般打印路径有两种选择,一是转移的时候加以记录,二是通过检查dp值回溯。#include#include#includeusing namespace std;const int... 阅读全文
posted @ 2015-07-17 14:01 瑞宇 阅读(192) 评论(0) 推荐(0)
摘要:N - 导弹拦截Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others)SubmitStatus某国为了防御敌国的导弹袭击,开发出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮... 阅读全文
posted @ 2015-05-23 02:07 瑞宇 阅读(267) 评论(0) 推荐(0)