- 博客(35)
- 收藏
- 关注
原创 LightOJ 1422(区间DP)
由于单纯的写个解题报告没有任何意义所以仅记录思路思路: 首先是线性DP通过保存第几场party的最少值来构建状态转移,然后问题显然是突变如何处理,思考用另一数组维护对应的剩余party(脱到第几件)下标,但是依然不对 思考用二维数组维护状态方程,对应取值时是脱还是穿,并同样使用二维数组维护对应的下标,乍一看好像可以解决复杂度也基本满足要求,但是存在问题,无法保存中间的移去量
2017-02-20 21:57:47
337
原创 woj 1538
题目链接:http://acm.whu.edu.cn/land/problem/detail?problem_id=1538题干描述:给一堆石头,每个石头有两个参数a,b,其中a为石头价值,现在开始捡石头,每捡一块石头,其他没有捡的石头的价值-b,求最大价值思路:太菜了,一开始各种乱七八糟的思路什么递归每次传个数组,然后修改回去啊,总之基本这些思路都是n^3以上的复杂度,显然是TLE T到
2016-12-09 20:52:14
482
原创 两个信封之谜
一道有趣的概率论题(Mark一下)有两个信封,一个钱多,一个钱少,均为整数。每个信封里面的钱不同,现在你可以选择一个信封并拿走里面的钱。有以下策略,你连续抛掷一枚硬币,直到出现正面为止,记录抛掷次数X,令X为你抛掷硬币的次数加上1/2如果你头一次打开信封里的钱数少于X,你换信封,否则不换。该策略能否使你获得较多钱的概率大于1/2这题乍一看,X和钱数有什么关系,然
2016-12-08 19:11:44
2494
原创 hdu4055(dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4055题干描述:给定一个字符串,要求计算前N个自然数的符合字符串要求的排列数思考:首先这是一个dp题,N最大为1000所以可以开二维数组,然后定义f[i][j]为第i位为j的结果问题是这里存在了当j为k时前面是否存在k这种情况并且如何排除,这是一个难点思路是通过网上看别人的分析后理解
2016-12-08 14:51:24
441
原创 uva10635(lcs lis O(NlgN))
题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=18&page=show_problem&problem=1576题干大意: 找最长的类似子字符串考虑:首先想到用类似lcs的方式计算结果,但是250^2^2显然内存放不下而且也超时,之后网上看到了lis lcs的Nlg
2016-12-07 23:05:52
1373
原创 poj1080(dp)
题目链接:http://poj.org/problem?id=1080题干要求:给定两个字符串(ATCG)用-补齐,不同的字符对(--无定义)会有不同权值,要求权值和最大(字符串长度不超过100)考虑:一开始的思路是找最大子列,但是思考以后有以下几个问题:当有两个相同长度的最大子列时如何处理当最大子列一个对应尾端一个对应非尾端,是否有可能添加-导致和更小,如果有怎么
2016-12-06 10:00:09
446
原创 SICP Table
主要叙述一下习题中的两个其一为生成keylist为argument的过程这个操作显然又是一种递归思路,我们只需不断生成子表直到最后一个key 但是与textbook中不同的是textbook中由于是two dimensional table 所以直接将首项加入子表中而我们生成的仅仅是子表,故只需(list (car keylist))即可同样,我们类似思路可以实现lookup
2016-06-12 13:56:26
328
原创 SICP deque
队列是一种基本的数据结构应用广泛此处要求实现一个双向队列双向队列的难点在于之前的队列是单向的,如果要在O(1)内完成insert delete操作,显然我们必须要知道某个结点的前驱后继那么我们最简单的方式就是建立一个单元结点存储结点值以及结点的前驱后继我们在每次插入删除中更新结点信息即可然而问题是当我们将代码实现以后不能简单的用所得队列来进行值返回这是因为双向队列导致了一个
2016-06-11 13:14:01
254
原创 SICP Montecarlo
要求利用Montecarlo测试来求pi课本中给出的方式是随机两个数的gcd=1的概率为6/pi^2习题要求利用给定点和矩形 利用S=pi*r*r来获得pi我们可以通过计算矩阵内的点(此矩阵应为长宽相等的特殊矩阵)包含在r^2内来获取r=1/2时的S,这样我们在最后结果*4 即可获得pi我们可以通过对随机数进行对区间长的取模再加上区间下限获得给定区间内的随机数之后我们就可以利用
2016-06-04 11:22:09
293
原创 SICP bank-modify
本次习题要求能够附加账号,使之拥有独立的账号和密码序列对,都能够对同一账户进行存钱取钱操作首先想到的方法是运用之前的put get方式来进行账户密码配对,但是这种方法需要增加删改东西太多,本人懒所以换了种方法第二种方法就是代码中采用的,首先,我们先有一个已有的账户,然后我们对该账户进行附加账户操作,该操作要给出原账户及密码及附加账户的密码然后判断以后我们利用之前的make-accoun
2016-06-03 21:38:49
438
原创 SICP banksystem
要求创建一个简易的银行账户管理系统这里采用了set!函数来改变参数balance 并将其作为Local variable 使得无法被外部访问之后我们利用类似的方式实现一个计数器,将其计数密码错误次数,当次数达到一定以后就报警难度不大只是这里的局部变量有些难以理解,为何会保留之前的参数,实在需要加深理解以下是本题代码(define (make-accumulator inti)
2016-06-03 10:59:26
315
原创 SICP PolySystem
两天时间总算完成了这题目,真尼玛多好在书倒是懂得循序渐进的方式,一步一步的优化系统首先是要建立最基本的多项式加减乘除加乘作为元运算比较简单,基本无难度之后做减法,注意这里有个比较简单的坎就是要递归的将嵌套的系数也变负,然后是除法,多加了几个局部变量帮助理解,合理运用之前的加减乘即可获得另外,我们之前实现的是稀疏型的多项式,要求我们也能处理稠密型,采取的方式是类比前一次的
2016-05-27 20:32:47
349
原创 SICP Combine operands of different types
之前那一节我们已经实现了不同类型的数据内部的独立运算,接下来我们将实现不同类型的交错运算,我们主要采取将整数化成分数化成复数的思路来进行计算之后我们对结果进行化简,即复数到分数到整数的过程同昨天的代码基本类似,修改了operate部分,将原先的error语句改成了判断哪个级别更高,然后采取对级别低的operand进行raise操作最后我们在对结果进行drop操作;;put an
2016-05-25 14:14:25
234
原创 SICP ex2-50
本次要求在之前三个类型的数据及存在相应的操作运算符的情况下将这些运算符统一化采用的是data-directed的方式需要注意的是要区分complex 内部的data-directed 以及运算符的data-directed 其他基本没有什么难度;;put and get(define (make-table) (let ((local-table (list '*table*
2016-05-24 21:56:29
248
原创 SICP chapter2 put get
自己在做的时候挺不方便的附上put get代码帮助需要的朋友们(define (make-table) (let ((local-table (list '*table*))) (define (lookup key-1 key-2) (let ((subtable (assoc key-1 (cdr local-table)))) (if subtable (let
2016-05-23 12:36:58
392
原创 SICP ex2-45
终于有习题了,但是这次的primitive put 和 get 会报错,代码无法测试,所以不给出代码2.45要求将之前的求导函数利用添加type的方式进行选择 type 则根据运算符来加问题为什么不把constant以及same-variable一并放到data-directed的程序中首先我们比较constant以及same-variable 发现一个需要两个参数,一个需要一个参数,
2016-05-23 10:10:40
330
原创 SICP HuffmanCode
本节主要介绍了利用抽象符号来进行Huffman Code说一下我觉得难的地方,首先,相较于之前,第一次用scheme写个比较完整的功能,可能头绪比较乱,最初的那些construct以及selector的创建是一个难的地方之后是对于编树将操作一步步分离,又一次见识到了啥叫抽象,像我思考的时候就是一整段功能一起思考,然后一阵头大,具体功能实现不是难点,主要还是设计整个程序的思路比较难,以下
2016-05-19 12:37:06
308
原创 SICP 2-31 2-32 SymbolicDiffer
ex2-31本题要求实现symbolic形式的指数求导,我们类比*求导,我们通过将系数 u^(n-1) 同导数结果相乘即可可能要注意n不是number 不能直接进行减法,我们采取将n-1放到一个list中这样既有括号,又解决了无法计算的问题以下是代码;primitive(define (constant? x) (number? x))(define (variable
2016-05-17 19:54:38
299
原创 SICP ex2-29
本次要求给出一个(equal? x y)的程序,要求能够逐个比较参数的每个元素我们考虑到元素有序列对以及原子元素,要比较是否相同,序列对同原子无法比较,我们可以将它单独作为一种情况默认为false然后在考虑原子比较中是否相同,序列对的话则可用递归解决(define (memq item x) (cond ((null? x) '()) ((eq? item (car x)) x)
2016-05-17 08:57:42
240
原创 SICP ex2-25 - ex 2-27
本节主要介绍了的一种树的数据结构ex2-25要求给出一种deep-reserve 的程序使 ((1 2) 3 4)能够变为(4 3 (2 1) )这个程序我们只需要加一个pair?检测,当为序列对时进行递归调用即可ex2-26要求给出能将给定参数的元素合并至一个list中,重点在于如何处理子序列对,我们这里采取了递归的方式,但是,这样会有一个问题,生成的子list的最后会有一个()
2016-05-16 08:42:51
387
原创 SICP ex 2-16 2-21 Sequences
ex2-16 2-17 2-18要求给出线性表的最后一个元素值,将线性表倒置,以及对每个元素进行平方操作给出最后一个元素比较简单,我们直接利用递归检测直到下一个元素为空,我们给出本元素的值即可将线性表倒置,由于之前我简单尝试了自己编写append函数,发现倒置挺麻烦的,所以思路很简单,直接利用迭代的方式就可以实现倒置每个元素进行平方,类似于append要创建一个顺序的list ,我们运
2016-05-14 14:08:09
316
原创 SICP ex2-6 2-15 Alyssa
ex2-6 2-12 一连串问题过多,不再赘述,前面几个难度都不是很大(define (make-interval a b) (cons a b))(define (upper-bound x) (cdr x))(define (lower-bound x) (car x))(define (intadd x y) (make-interval (+ (lower-bound x
2016-05-13 19:14:52
412
原创 SICP ex2-3 2-4 2-5(lambda calculus)
2-3要求解释(define (cons x y) (lambda (m) (m x y)))(define (car z) (z (lambda (p q) p)))为什么 此处的(car (cons x y))能够正常运行给出解释乍一看,这东西是什么鬼东西,一片迷茫,仔细一分析我们将其展开((lambda (m) (m x y)) (lambda (p q) p))好
2016-05-12 15:14:19
488
原创 SICP(1985) ex2-2 line-segment
要求创建一个数据类型线段,能够给出线段中点比较简单,直接上代码(define (make-line-segment start-point end-point) (cons start-point end-point))(define (make-point coordinatex coordinatey) (cons coordinatex coordinatey))(define
2016-05-11 12:47:52
325
原创 SICP ex2-1 modified rational arithmetic
经过十多天煎熬,本宝宝终于顺利进入第二章,傲娇脸首先,本章章首简要回顾了上一章的基本内容以及总体概述了data abstraction 的原因重要性,以及介绍了本章将会学习的一些东西2.1.1通过一个rational arithmetic的例子来引出data abstraction 并且介绍基础pair 语法ex2-1要求修改书中所给的make-rat使之能够在给定参数为-时,将符号放
2016-05-10 18:45:04
711
原创 SICP 1-33 1-34 1-35
ex1-32 要求利用过程返回值给出一个用于计算 f(f (x))这样的函数过程ex1-33要求计算一个函数的平滑函数g(x)=(f(x-dx)+f(x)+f(x+dx))/3并利用ex1-32给出的过程进行多次的平滑运算以下,给出代码(define (smooth f) (lambda (x) (/ (+ (f (- x .001))
2016-05-09 19:05:40
621
原创 SICP ex1-30 ex1-31
ex1-30本题要求比较brute-force method 以及 golden method 计算单峰函数 的极大值所需要的函数值计算次数我们先计算brute-force method 时间为2log2 (L/T) 其中L为初始区间长,T为容错区间长我们再计算golden method 时间为log 1/(1- (golden-ratio)^2) (L/T) 化简后我们得
2016-05-08 15:26:49
249
原创 SICP ex 1-27
由于ex1-27是对于26的改进,所以直接给出27要求,之前的模板,其实我们可以采用filter-accumulate的更通用的模板来抽象(filter-accumulate combiner null-value predicate term a next b)要求写出给定范围素数的平方的和,以及给定的n 给定范围内GCD(a,n)=1的积(define (filter-accumula
2016-05-06 08:25:45
258
原创 SICP ex1-23 ex1-25
今天的题目要求编程1-23要求运用Simpson'sRule来求积分公式=h/3[y0+4y1+2y2+4y3+2y4...+2y(n-2)+4y(n-1)+yn]h=(b-a)/nyk=f(a+kh)(define (integral a b) (define n 100) (define dx (/ (- b a) n)) (define (reminder x y)
2016-05-04 15:34:17
288
原创 SICP ex1-20 ex1-22
1-20题意,有人认为既然我们已经知道了fast-exp的计算方式,那么我们的expmod就显得多余,我们可以直接计算fast-exp mod n代替expmod 他这样想对吗直接上代码(define (reminder x y) (if (< x y) x (reminder (- x y) y)))(define (expmod base Exp div) (define
2016-05-03 08:49:21
276
原创 SICP ex1-17 ex-18 ex1-19
这道题的题目背景:用寻找最小divisor判断素性的方法O(n^(1/2))编写一个能给出给定范围素数的程序,并能够计算程序进行的时间首先我们创建能够判断素数的函数然后我们用给定范围内的奇数去判断(define (test n) (define (smallest-divisor n) (define (reminder x y) (if (< x y) x (reminder
2016-05-02 15:32:44
330
原创 SICP ex1-15
题目背景:利用辗转相除法计算最大公因数要求利用normal-order evaluation展开gcd 并计算O(假设时间界与reminder成比例)首先我们利用例子(gcd 206 40)进行探索(gcd 206 40)if 判断40非0 展开(gcd 40 (reminder 206 40))if 判断(reminder 206 40)) 非0 继续展开(gcd
2016-05-01 22:01:46
274
原创 SICP ex1-11 ex1-12 ex1-14
ex1-11要求用迭代的方式实现fast-exp,由于给出的HINT比较详细,指出(b^n/2)^2=(B^2)^(n/2),当n为偶数,直接二分,当n为奇数,我们将一个值单独取出放到系数中来具体代码如下:(define (iexp b n) (define (reminder x y)(if (> x y) (reminder (- x y) y) x)) (define (is
2016-04-30 22:31:11
455
原创 SICP ex1-10 order of Growth
本来是觉得这个题目蛮简单的没打算写一篇博客后来发现还挺麻烦的,就写下来顺便让自己开心一下题目背景:由ex1-9的change 递归版本,对(change 11 5)函数展开,求取空间的O和时间的O首先我们画一个树状图,由于展开较大,此处不给图我们知道空间的函数f(n)=树的层数,时间f(n)=树的节点数然后通过简单分析我们会发现树的层数就是把change两个para都减到0每减1,
2016-04-30 00:19:30
463
原创 SICP EX1-9 change 问题
题目背景:给定一个数额,现有5种面额的硬币提供选择,编程计算共有多少种change方案思路一:sicp中给定的递归思路(将该问题化为数额更小的子问题,以及硬币种类更少的子问题),书上有相关分析代码,不再赘述.思路二:(ex1-9)要求利用迭代的方式计算
2016-04-28 11:37:26
254
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人