随笔分类 - 动态规划
摘要:P2858 [USACO06FEB]奶牛零食Treats for the Cows区间dp,级像矩阵取数, f[i][i+l]=max(f[i+1][i+l]+a[i]*(m-l),f[i][i+l-1]+a[i+l]*(m-l)); 1 #include<iostream> 2 #include<
阅读全文
摘要:P1005 矩阵取数游戏区间dp,憨贪心可以过两个点,f[l][r]表示l,r这一段都选完的取得的最大得分f[l][r]=max(f[1+l][r]+a[l],f[l][r-1]+a[r])*2越靠中间,乘的2越多,枚举区间长度,和左右端点答案是f[1][m] 1 #include<iostream
阅读全文
摘要:最大连续子段和sum表示以当前数a[i]结尾的最大子段和,如果sum<0,那么它对后面就没有积极作用,不如抛弃。所以sum+=a[i]维护最大值sum=max(sum,0) 1 #include<iostream> 2 #include<cstdio> 3 #include<queue> 4 #in
阅读全文
摘要:P2690 接苹果f[i][j][k]表示i=1或2,表示j时刻cow在哪棵树下j表示时刻k表示转移了k次如果当前第1棵树落苹果f[1][t][left]=max(f[1][t-1][left],f[2][t-1][left-1])+1;如果当前第2棵树落苹果f[2][t][left]=max(f[
阅读全文
摘要:[USACO08FEB]修路Making the Grade比较难的dp,比赛时打的找LIS,然后其他的尽可能靠近,40分。先举个例子61 2 3 1 4 561 2 3 3 4 5第4个1要么改成3,要么改成4,反正是数列中的数。所以最优情况下,答案中的数都是原数列中有的。b[]是a[]由小到大排
阅读全文
摘要:P2719 搞笑世界杯我觉得这个难度是假的,如果不知道这个是dp我就做不出来,好吧,知道我也没做出来。。f[i][j]表示剩i张A票,j张B票时,最后两张票相同的概率。当前的队首有一半的概率选A,一半的概率选B,so f[i][j]=0.5*f[i-1][j]+0.5*f[i][j-1]答案为f[n
阅读全文
摘要:P3402 最长公共子序列经典问题LCS-->LIS 没有重复的值才可以这么做把第一数列转化成1~n,然后将第二个数列映射成1~n中的一些数,然后求第二个数列的LIS即可,然后用Bit求LIS,O(nlogN) //数据太大,考虑map #include<iostream> #include<cst
阅读全文
摘要:树状数组解决LIS O(nlogn)之前写过二分查找的LIS,现在不怎么记得了,正好用Bit来搞一波。f[i]表示以a[i]结尾的LIS的长度。t[x]表示以数值x结尾的LIS的长度。即t[x]=max(f[j]),a[j]==x,j<i。f[i]=max(t[x])+1,x<a[i]或x<=a[i
阅读全文
摘要:最长公共字串(非连续)先考虑二维,复杂度O(n*m),但是空间复杂度太高了,n如果>100000就憨脸了。a[i][j]=a[i-1][j-1]+1(s[i]==s[j]),max(a[i-1][j],a[i][j-1]);降低空间复杂度,考虑使用滚动数组。从转移方程中可以看出,只会用到a[i-1]
阅读全文
摘要:P2782 友好城市一道伪装得很好的dp,一开始没想出来,不相交就是所有的都在右边,也就是对于当前的城市i和它的友好城市的坐标都在城市j和它的友好城市的右边,这样就转化成了求最长上升子序列,f[i]表示选到北岸的第i个城市,能最多批准数,不断更新最大值。要小心Max,没有更新的情况,所以要o(max
阅读全文
摘要:P1679 神奇的四次方数用一些什么东西组成一个什么东西,要求什么东西最优,这时候要考虑背包,不过要分析清楚是什么类型的背包。这题显然是个完全背包。
阅读全文
摘要:P2800 又上锁妖塔三种方式,当前这一层,是爬上来的,由上一层跳上来,由上二层跳上来。取min
阅读全文
摘要:[POI2010]GRA-The Minima Game一道与博弈相关的dp,想了好长时间,才想明白。A与B都是从大到小,取连续的一段,因为每次都是取当前拿走的元素的最小值。然后由小到大排序,f[i]表示两个人取完了,前i个元素,(先手-后手)的最大值,我一直卡在这里,我总是以为这里的先手就是A,后
阅读全文
摘要:codevs 1795 金字塔 2这个题比完全背包多了一个总数的限制,即一定要选(m+n)个,题中说总重量不超过n,所以至少选择m个重量为0的,然后初始化的时候,都填成重量为0的,然后再一个个地把它们拿出来,做完全背包。
阅读全文
摘要:P1890 gcd区间我一开始80分暴力,模拟100做法dpO(n^2+m)f[i][j]表示i到j的 gcd初始化f[i][i]=i;f[i][j]=gcd(f[i][j-1],a[j]);这样查询就到了O(1) 80代码 100分
阅读全文
摘要:3.编辑距离问题(edit.pas/c/cpp) 【问题描述】 设A和B是两个字符串。要用最少的字符操作将字符串A变成字符串B。这里所说的字符操作包括: (1)删除一个字符。 (2)插入一个字符。 (3)将一个字符改为另一个字符。 将字符串A变成字符串B的最少字符操作数称为字符串A到B的编辑距离,记
阅读全文
摘要:P1113 杂务 这道题我爆0啦,有点dp的小味道,显然,一个工程的完成时间由最慢的人决定(可以同时进行),m[i]代表完成杂物i所需的最少时间,m[i]=max(m[i],m[j]+v[i]),j是需要在i之前完成的杂物,最慢的也要完成,所以要取最大。虽然题目中说准备工作只可能在杂务1..k-1中
阅读全文
摘要:题目:跳跃版图 题目描述 有一个 n×n 的格子,每个格子中有一个非负整数。你的目标是从左上角跳到右下角,每步只能向右或向下跳。格子中的数代表从该格开始跳跃的前进步数,如果某次跳跃会跃出格子界限则该跳跃是禁止的。注意 0 是一个绝对终点,因为从这里无法再移动。 你的任务是统计有多少种合法路径。上图
阅读全文
摘要:P1769 淘汰赛制_NOI导刊2010提高(01) 我进行了分组,1组和2组打,3组和4组打, 举个例子,在8进4的比赛中6在2组,和1组的打,1胜出的概率*6打败1的概率,求和之后,再*当前6从上一轮胜出的概率,最后求最大即可。
阅读全文
摘要:洛谷P1832 A+B Problem(再升级) ·给定一个正整数n,求将其分解成若干个素数之和的方案总数。 先说我的垃圾思路,根本没有验证它的正确性就xjb写的,过了垃圾样例,还水了20分,笑哭。。。其实差一点就想到正解了,完全背包,我的思路是把背包的物品缩小到了一种,而正解的物品应该是1~n的所
阅读全文