- 博客(23)
- 收藏
- 关注
原创 动态规划入门之LCS(2)
LICS问题是在最长公共子序列(LCS)基础上,要求还要序列是严格单调递增的。本来是打算在LCS代码的基础上:if(a[i-1]==b[j-1]) dp[i][j]=dp[i-1][j-1]+1;else dp[i][j]=max{dp[i-1][j],dp[i][j-1]};加上控制语句使得序列严格单调递增,但是始终没有想出来。参考网上其他人博客,发现网上千篇一律都是另一种解法。
2016-02-11 21:36:34
351
原创 动态规划之石子合并(2)
改进后:import java.io.BufferedInputStream;import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner scan = new Scanner(new BufferedInputStream(Syste
2016-01-30 19:54:20
431
原创 动态规划之石子合并
package com.java.dp;import java.util.Scanner;/** * 围成一圈的石子合并问题 * j-i=d d=0··m * dp[i][j]=max{dp[i][j],dp[i][k]+dp[k+1][j]+cos[i][j]} */public class MergeStone { public static void
2014-05-16 11:15:41
646
原创 需要先排序的DP-----划分土地
【问题描述】 农夫John准备扩大他的农场,他正在考虑N (1 每块土地的价格是它的面积,但FJ可以同时购买多快土地. 这些土地的价格是它们最大的长乘以它们最大的宽, 但是土地的长宽不能交换. 如果FJ买一块3x5的地和一块5x3的地,则他需要付5x5=25.FJ希望买下所有的土地,但是他发现分组来买这些土地可以节省经费. 他需要你帮助他找到最小的经费.【输入】第1行: 一个
2014-03-15 20:22:39
656
原创 素筛法选素数
POJ3518:输入一个数输出其左右两侧素数的距离。素筛法打素数表。 for(int i=2;i*i if(!b[i]){ for(int j=i;j*i b[i*j]=true; } } }
2014-01-19 19:05:43
804
原创 分治求凸包周长
POJ 1113题意: 从前有一个吝啬的国王要求他的总设计师在他的城堡周围建一道围墙。这国王非常吝啬,以至于他没有听总设计师的建一个拥有外形漂亮又高大的砖头塔楼的围墙的建议,而是要求用最少的石头和劳工围着整个城堡建围墙,但是要求围墙必须远离城堡一定的距离。要是国王发现发现设计师用了超过建造围墙所需要的材料,那么这个设计师的脑袋将保不住了。而且,国王要求设计师马上拿出一个建墙的计划,列
2014-01-19 10:48:14
806
原创 用凸包优化两点间最长距离问题
第一个分治法求凸包,POJ2187求多个点间最长距离,若直接用循环枚举所有线段会超时,直接暴力求解时间复杂度为O(n)。若先用NlogN的时间求出凸包点集,在对点集中所有点枚举,效率会缩短到O(nlogn)。 求凸包基本思路:1、找出点集中最靠左和最靠右的点,也就是找到一条能够完全划分点集的主线段。2、把所有点分成两类,一类在主线段左边,一类在主线段右侧,分别带入divide函
2014-01-18 20:29:11
1250
原创 优先队列与堆
看了Sedgewick的红皮Algorithms中用堆实现优先队列后,在POJ上找了题目来练习下。 POJ2442题目大意: 给出m个序列,每个序列有n个非负整数,每次从每一个序列中取出一个数(共m个数)求和(显然有 n^m 个和),求这些和数中前n个最小的数。 样例:(第一行是测试次数1,第二行是m和n,接下来是m个序列) Sample Input
2014-01-07 16:17:47
505
原创 动态规划之求最大子矩阵问题
练习了几个星期的动态规划,结果在POJ上随便找些题目还是不会做。。北大POJ1050:求最大子矩阵问题最大子矩阵问题:问题描述:(具体见http://acm.pku.edu.cn/JudgeOnline /showproblem?problem_id=1050)给定一个n*n(0Example:0 -2 -7 09 2 -6 2-4 1 -4 1-1 8 0
2014-01-07 13:45:49
798
原创 动态规划入门之嵌套矩形
嵌套矩形描述:有n 个矩形,每个矩形可以用a; b 来描述,表示长和宽。矩形X(a; b) 可以嵌套在矩形Y (c; d)中当且仅当a 但不能嵌套在(3,4)中。你的任务是选出尽可能多的矩形排成一行,使得除最后一个外,每一个矩形都可以嵌套在下一个矩形内。输入:第一行是一个正整数N(0 个正正数n,表示该组测试数据中含有矩形的个数(n a; b(0 输出:
2013-12-28 19:41:23
676
原创 动态规划入门之完全背包
完全背包问题(UKP, unbounded knapsack problem):每种物品都有无限个可用 最简单思路就是把完全背包拆分成01背包,就是把01背包中状态转移方程dp[i][j]=dp[i-1][j-w[i]]+v[i]相应的做点修改,也就是说01背包只考虑放与不放进去两种情况,而完全背包要考虑 放0、放1、···、放j/w[i] 的情况。 for (i
2013-12-26 14:59:46
1841
原创 动态规划入门之01背包
描述:有N 种物品,第i 种物品的重量为wi,价值为vi,每种物品只有一个。背包能承受的重量为W。将哪些物品装入背包可使这些物品的总重量不超过背包容量,且价值总和最大?输入:第1 行包含一个整数T,表示有T 组测试用例。每组测试用例有3 行,第1 行包含两个整数N;W(N 1000;W 1000) 分别表示物品的种数和背包的容量,第2 行包含N 个整数表示每种物
2013-12-26 13:39:55
487
原创 动态规划入门之最大M子段和
求最大M子段,,又是典型的动态规划例题,做起来的第一感觉就是跟前两道题有点不一样。。 状态变量: dp[m][n]表示要取m段,并且最后一段包括a[n-1] 的最大子段和状态转移方程:dp[i][j] = dp[i][j - 1] + a[j - 1]; //a[j-1] 直接加入到第i段中for(
2013-12-24 17:47:43
800
原创 动态规划入门之LCS
求最长公共子序列,可以用典型的动态规划解法,上一篇求字符串编辑距离的dp解法也可以说是由这个案例变形而来。 状态变量: dp[i][j]表示字符串a[i]和字符串b[j]的最长公共子序列 状态转移方程:if(a[i-1]==b[j-1]) dp[i][j]=dp[i-1][j-1]+1;else dp[i][j]=max{dp[i-1][j],dp[i][j-1]};
2013-12-24 15:07:12
485
原创 动态规划入门
动态规划思路流程:(1)确定问题的决策对象。(2)对决策过程划分阶段。 (3)对各阶段确定状态变量。(4)根据状态变量确定费用函数和目标函数。(5)建立各阶段状态变量的转移过程,确定状态转移方程。 适用条件:任何思想方法都有一定的局限性,超出了特定条件,它就失去了作用。同样,动态规划也并不是万能的。适用动态规划的问题必须满足最优化原理和无后效性。1.最优化原理(
2013-12-24 14:48:10
567
原创 求序列第K大数 POJ2104
在POJ2104中,由于会给定序列的区间,而且是多次查询,所以像快速排序加二分这种分治算法的时间效率就不算很高了,然后自己尝试用二叉搜索树保存数据,粗略的写了个java代码: import java.util.Arrays;import java.util.Scanner;/** * * @author Sot_fzh */public class Poj2104
2013-12-05 18:41:59
683
转载 主定理笔记(master theorem)
T(1)=d and for n>1,T(n)=aT(n/b)+cn n is a power of b;prove z if az if a=b, T(n)=O(nlogn); z if a>b, T(n)=O(nlogba)//b为底 logba 为n的次数由问题有 T(1)=d T(n)=aT(n/b)+cn,且有n=b^a 这个递推式描述了大小为
2013-12-03 19:17:27
1236
原创 求序列第K大数的部分快速排序法
用的是经典快速排序方法,每次快排都可以确定一个键的位置,得到关键字的下标,则可判断需要找的第K小的数在其左边还是右边,然后继续快排,直至找到恰好等于关键字为止。。 快速排序的基本思想是:每次从无序的序列中找出一个数作为中间点(可以把第一个数作为中间点),然后把小于中间点的数放在中间点的左边,把大于中间点的数放在中间点的右边;对以上过程重复log(n)次得到有序的序列。平均情况下它的时间
2013-12-03 19:14:27
1373
原创 递推之整数划分问题(2)
整数划分问题的递推式dp( i , j )=dp(i-j,j)+dp(i,j-1); 这里没有限制容器数量,所以与上一题的递推式{dp(i,j)=dp(i-1,j-1)+dp(i,j-i)}有所不同。该递推式的含义由于理解的不同所以因人而已,网上主流的理解方法:dp( i , j )代表一个数值i它可被划分为一个或多个小于等于j的数的方案数,它的递推式更容易理解,就是
2013-12-03 17:23:57
651
原创 递推之整数划分问题(1)
题目大致意思应该是 分配i辆汽车搬运j台电脑的问题,与整数分解类似可以用递推来解决。 关键代码: public int trans(int i,int j){ //i辆车 j台电脑 if(j if(i==1){ return 1; } return trans(i-1,j-1
2013-12-03 16:40:53
747
转载 安装SQL Server2005 29506错误码的解决方案
发现在有的Win7下安装SQL Server2005到最后时会在安装的最后时刻报29506错误,但是之前安装两次SQL Server Express也并没有报错,所以这次耽误好久,上网查找资料后发现是Win7版本不兼容的问题。 在windows7下安装SQL2005时会提示不兼容,需要安装SQL2005 SP3或更高的版本,不用管它,一路安装下去,等装完在开始菜单没有SQL Server
2013-11-27 19:51:46
6832
原创 求最小依赖集java代码
最小依赖集代码,step3()只有一次遍历左边集,所以存在问题,但将step2()放在step3()前面,则掩饰了它的问题,程序可以得出正常结果。代码有点稀烂,应该先提取个getClosure()求属性闭包的方法,这样可以减少代码量。还有BuilderString在此处完全体现不出作用,建议改成String。 package 最小化依赖集;import java.util.Link
2013-11-26 20:49:03
823
转载 模式分解的无损连接性之深入剖析
1.无损连接分解的形式定义 无损连接分解的形式定义如下:设R是一个关系模式,F是R上的一个函数依赖(FD)集。R分解成数据库模式δ={R1,……,Rk}。如果对R中每一个满足F的关系r都有下式成立: 那么称分解δ相对于F是“无损连接分解”,否则称为“损失连接分解”。其中表示自然连接。 从上述形式定义中可知,若直接根据定义来判断某个分解是否具有无损连接性,那么就得“对R中每一个
2013-11-26 20:06:51
6685
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人