摘要:
题意:给出每个城市interesting的值,和城市之间的飞行路线,求一条闭合路线(从原点出发又回到原点)使得路线上的interesting的值之和最大因为要输出路径,所以用pre数组来保存前驱在输出路径的时候,我是把前驱一次放在route数组里面,然后再将整个数组反转过来另外,看别人的题解里面还有... 阅读全文
摘要:
求递增子序列的最大和,没什么好说的。粗暴1A,嘎嘎! 1 //#define LOCAL 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 8 int a[1010]; 9 int dp[1010];1... 阅读全文
摘要:
单调递增子序列的变形,一种长方体虽说可以有无限个,但它最多有3中摆放方法(我们假设x方向的长度不小于y方向的长度)。然后对x递减一级排序,y递减二级排序,相当于按面积递减排序。dp初始化就是对应状态的长方体的高度如果第j个长方体的x,y分别(严格)大于第i个长方体的x,y (这里排序后的j 3... 阅读全文
摘要:
那么一大篇的题目描述还真是吓人。仔细一读其实就是一个LIS,还无任何变形。刚刚学会了个二分优化的DP,1A无压力。 1 //#define LOCAL 2 #include 3 #include 4 #include 5 using namespace std; 6 7 const int ... 阅读全文
摘要:
这是最大上升子序列的变形,可并没有LIS那么简单。需要用到二分查找来优化。看了别人的代码,给人一种虽不明但觉厉的赶脚直接复制粘贴了,嘿嘿原文链接:http://blog.csdn.net/ice_crazy/article/details/7536332假设存在一个序列d[1..9] = 2 1 5... 阅读全文
摘要:
半个下午,总算A过去了毕竟水题好歹是自己独立思考,debug,然后2A过的我为人人的dp算法题意:为了支持你的观点,你需要从给的数据中找出尽量多的数据,说明老鼠越重速度越慢这一论点本着“指针是程序员杀手”这一原则,我果断用pre来表示这只老鼠的直接前驱的序号代码中我是按体重从大到小排序,然后找出一条... 阅读全文
摘要:
最长递增子序列?Why?朦朦胧胧的感觉也许是这样的。。大神说要用Dilworth定理来证明无爱了,这个定理先放一放吧 1 //#define LOCAL 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 ... 阅读全文
摘要:
如果说难的话,难就难在对阶段的划分。这又是一道对值域空间进行分段的题目。因为rp有正有负,所以将整个数组向右平移10000个单位长度l和r分别是rp可能的最小值因为b是“门槛”,所以如果发生好事(即c>0)循环就从b到r发生坏事(即c 3 #include 4 #include 5 #inclu... 阅读全文
摘要:
将式子变形为ax-c=my可以看出原式有解当且仅当线性方程ax-my=c有解设g = gcd(a, m)则所有形如ax-my的数都是g的倍数因此如果g不整除c则原方程无解。下面假设g整除c:利用扩展欧几里得算法解出 au + mv =g 一个特解(u0, v0)所以可用整数c/g乘上上式au0*(c... 阅读全文
摘要:
扩展欧几里得算法就是求: ax + by = gcd(a, b)的一组整数解(x, y)一、非递归的实现:首先看a = 60, b = 22的情况:表格左边是欧几里得算法,右边等式计算ax + by = gcd(a, b)的解a = 2 × b + 1616 = a - 2bb = 1× ... 阅读全文
摘要:
“人人为我”的解法:dp[i][j]表示坐标为(i,j)的点开始下滑的最大长度。则dp[i][j]为(i,j)周围四个点中比(i,j)低,且最大长度最大再加一的值用结构体来储存一个点的坐标和高度,这样按高度从小到大排完序以后还不会丢失坐标的值从小到大遍历所有的点,经过一个点(i,j)时,用递推公式求... 阅读全文
摘要:
接触动态规划的第一题是数塔问题,第二题就是01背包问题了。当时看的懵懵懂懂,回过头来再看这道题还是非常简单的了。用 dp[i][j] 表示取前i种物品,使它们总体积不超过j的最优取法取得的价值总和状态转移方程:dp[i][j] = max(dp[i-1][j],dp[i-1][j-cost[i]]+... 阅读全文
摘要:
第一种解法是很经典的动态规划,对于值域较小的题目,还可以采用第二种方法,考虑对值域空间-即对容积的可达性进行动态规划。这道题里面采用第二种解法还会有空间上的优化。有时把值域作为一种状态不单单是一种解法,还有可能是唯一的解法。如HDU 1574 RP问题描述有一个神奇的口袋,总的容积是40,用这个口袋... 阅读全文
摘要:
子序列就是子序列中的元素是母序列的子集,且子序列中元素的相对顺序和母序列相同。题目要求便是寻找两个字符串的最长公共子序列。dp[i][j]表示字符串s1左i个字符和s2左j个字符的公共子序列的最大长度。注意s1第i个字符为s1[i-1]于是有递推公式:对于abcfbc和abfcab两个字符串,求公共... 阅读全文
摘要:
果然,动态规划的无后效性是和阶段的划分有关的。受前面的影响,涉及到n个元素的这种题目,我第一想法就是找前k个元素的最优解。但课件里面说了,这是不满足无后效性的:“求序列的前n个元素的最长上升子序列的长度”是个子问题,但这样分解子问题,不具有“无后效性”假设F(n) = x,但可能有多个序列满足F(n... 阅读全文
摘要:
能用动规解决的问题的特点1) 问题具有最优子结构性质。如果问题的最优解所包含的子问题的解也是最优的,我们就称该问题具有最优子结构性质。2) 无后效性。当前的若干个状态值一旦确定,则此后过程的演变就只和这若干个状态的值有关,和之前是采取哪种手段或经过哪条路径演变到当前的这若干个状态,没有关系。尤其是第... 阅读全文
摘要:
很无爱的一道题。题解都看得一知半解的。acm之家的题解,留着以后慢慢体会:把这题转化为背包模型,每个%20能量算一个单位,最多有15个,如果大于5个有一个加速卡,如果大于10个有2个加速卡,如果等于16则边为10,2个满时清0.15就是背包的最多容量,正常跑算一个物品,权值(这里不说重量有负值)为1... 阅读全文
摘要:
线段树的指针表示法。代码还有待消化。。代码里面多次用到了函数递归,感觉这次对递归又有了深一层的理解。 1 #define LOCAL 2 #include 3 #include 4 #include 5 using namespace std; 6 7 struct CNode... 阅读全文
摘要:
学习线段树的第一题。是的,区间树这个名字更为形象。线段树适用于和区间统计有关的问题。比如某些数据可以按区间进行划分,按区间动态进行修改,而且还需要按区间多次进行查询,那么使用线段树可以达到较快查询速度。下面的代码是用数组来表示树结构的。 1 //#define LOCAL 2 #include 3... 阅读全文
摘要:
坚持写解题报告,是总结提高,也是对自己的激励。这道题貌似没有用到动态规划啊。是纯贪心吧,是吧。。定义一个结构体,先对score从大到小排序,然后对deadline从大到小二级排序。从分值最高的作业开始,看看是否能在deadline那天或之前完成。如果不能完成,那么这分只能丢掉。 1 #define ... 阅读全文