随笔分类 - Algorithm---Dynamic Algorithm
摘要:有n个程序,这n个程序运作产生m行代码,但是每个程序产生的BUG总和不能超过b,给出每个程序产生的代码,每行会产生ai个BUG,问在总BUG不超过b的情况下,我们有几种选择方法思路:看懂了题意之后就是一个完全背包题了定义dp[ i ][ j ][ k ] 表示前 i 个程序员,已经写了 j 行代码,...
阅读全文
摘要:也是一道比赛时候没有写出来的题目,队友想到了解法不过最后匆匆忙忙没有 A 掉What a pity...题意:定义Beauty数是一个序列里所有不相同的数的和,求一个序列所有字序列的Beauty和 1 #include #include #include #include #include #inc...
阅读全文
摘要:用dp[i][j]表示当前安排好了前i个任务,且机器A和机器B完成当前分配到的所有任务的时间差为j(这里j可正可负,实现的时候需要加个offset)时,完成这些任务的最早时间。然后根据j的正负,分别考虑任务i+1的两种分配方法。比如j大于0,A比B后空闲,这个时候如果再把任务分配给A的话,B空闲知道...
阅读全文
摘要:题目大意:JAVAMAN 到梦幻城市旅游见到了黄金树,黄金树上每天回结出金子。已经有n棵树,JAVAMAN要停留m天,每天只能砍掉一棵树,砍掉树后就能得到树上的黄金。给定n棵树上原有的黄金a[i]和每天可以新增加的黄金b[i],求他最多可以得到多少黄金。中途如果有1天不砍树的话,之后的日子久不能砍树...
阅读全文
摘要:题意:一一个21点游戏。1. 有三个牌堆,分别为1X,2X,3X。2. 纸牌A的值为1,纸牌2-9的值与牌面面相同,10(T)、J、Q、K的值为10,而而joke(F)的值为任意大大。3. 一一列牌要按顺序放入入三个牌堆中。当某个牌堆的值超过21点时,不能在放牌;如果某个牌堆的总值为21点时,这个排...
阅读全文
摘要:无邪的飞行棋Time Limit1sMemory Limit64KBJudge ProgramStandardRatio(Solve/Submit)15.38%(4/26)Description:大家还记得小时候玩过的飞行棋游戏吧,和小伙伴们一起体验飞行的乐趣!随着岁月的流逝我们换个方法重温这个游戏...
阅读全文
摘要:题意:有三个骰子,分别有k1,k2,k3个面。每次掷骰子,如果三个面分别为a,b,c则分数置0,否则加上三个骰子的分数之和。当分数大于n时结束。求游戏的期望步数。初始分数为0设dp[i]表示达到i分时到达目标状态(即i = n)的期望,pk为投掷k分的概率,p0为回到0的概率则dp[i] = ∑(p...
阅读全文
摘要:一共有N段过程,每段过程里可以选择 快速跑、 匀速跑 和 慢速跑对于快速跑会消耗F1 的能量, 慢速跑会集聚F2的能量选手一开始有M的能量,即能量上限求通过全程的最短时间定义DP[i][j] 为跨越第 i 个栏,剩余 j 点能量动态转移方程dp[i][j] = min(dp[i][j], dp[i-...
阅读全文
摘要:这道题目的意思就是排两排书,下面这排只能竖着放,上面这排可以平着放,使得宽度最小根据题意可以得出一个结论,放上这排书的Width 肯定会遵照从小到大的顺序放上去的Because the total thickness of vertical books is fixed it's good to c...
阅读全文
摘要:一道经典的Dp..01背包定义dp[i] 为需要构造的数字为i 的所有方法数一开始的时候是这么想的 for(i = 1; i 0){ dp[i] += dp[i - a[j]]; } } }状态存在冗余, 输出的时候答案...
阅读全文
摘要:一道经典Dp.定义dp[i][j] 表示由i个节点,j 层高度的累计方法数状态转移方程为: 用i个点组成深度最多为j的二叉树的方法树等于组成左子树的方法数乘于组成右子树的方法数再累计。 & / \ @ # / \ @ @如图中 & 为顶点, @ 为左子树, # 为右子树需要注意的...
阅读全文
摘要:又是去理解了一次01背包。这道题目的意思就是给你一个N (N #include #include #include #include #include #include #include #include #include #include #include #include #define Max...
阅读全文
摘要:题目很好理解,问你的是在所给的图中周长最长的矩形是多长嗯用坐标(x1, y1, x2, y2)表示一个矩形,暴力图中所有矩形易得递推式:(x1, y1, x2, y2)为矩形的充要条件为: (x1, y1, x2, y2) 和 (x1, y1, x2, y2)为合法矩形,即全部为0Point(x2,...
阅读全文
摘要:也是一道dp ,想到了就会觉得很巧妙矩阵中只有白块和黑块,要求repaint后满足下述条件:每列一种颜色根据输入范围x, y 要求条纹宽度在[x, y] 之间数据范围:n,m,xandy(1 ≤ n, m, x, y ≤ 1000;x ≤ y).求:满足条件最少repaint的次数自己在YY的时候觉...
阅读全文
摘要:非常感谢 Potaty 大大的援助使得我最后A出了这两题DP==================================189A : 求切分后的ribbon最多的数目,不过要求切分后只能存在a or b or c 的长度O(n)的效率:遍历下来求 f[i - a]、f[i - b]、 f[i...
阅读全文
摘要:虽然是一道还是算简单的DP,甚至不用滚动数组也能AC,数据量不算很大。对于N个数,每个数只存在两个状态,取 和 不取。容易得出状态转移方程:dp[i][j] = dp[i - 1][j ^ a[i]] + dp[i - 1][j];dp[i][j] 的意思是,对于数列 中前 i 个数字,使得 XOR...
阅读全文
摘要:详细解题报告可以看这个PPT这题如果是直接开int 5000 * 5000 的空间肯定会MLE,优化方法是采用滚动数组。原LCS转移方程 :dp[i][j] = dp[i - 1][j] + dp[i][j -1]因为 dp[i][j] 只依赖于 dp[i - 1][j] 和 dp[i][j - ...
阅读全文
摘要:题目意思还是很好理解的,在一个数列中,找出不相交的两个子串使得其和最大。解题思路: 对于每个i来说,求出[0 ~ i - 1] 的最大子段和以及[i ~ n - 1]的最大子段和,在加起来,求最大的一个就行了。 [0 ~ i - 1]的最大子段和从左向右扫描,[i ~ n - 1] 的最大子段和...
阅读全文
摘要:经典的最长公共子序列问题。状态转移方程为 :if(x[i] == Y[j]) dp[i, j] = dp[i - 1, j - 1] +1else dp[i, j] = max(dp[i - 1], j, dp[i, j - 1]);设有字符串X和字符串Y,dp[i, j]表示的是X的前i个字符与Y...
阅读全文
摘要:题意:一棵树,给出每个点的权值和每条边的长度,点j到点i的代价为点j的权值乘以连接i和j的边的长度。求点x使得所有点到点x的代价最小,输出虽然还是不太懂树形DP是什么意思,先把代码贴出来把。这道题目的做法是:先进行一次DFS,以每个节点为根,求出它下面节点到它的数量和。再进行一次DFS,以每个节点为...
阅读全文