自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

YiShi's Blog

new site -> https://shiyi.threebody.xyz

  • 博客(13)
  • 资源 (1)
  • 收藏
  • 关注

原创 哈夫曼编码压缩解压缩实现&不同类型文件压缩比的测试

压缩原理及步骤&&压缩比的计算压缩原理及步骤压缩的第一步: 将一个文件以各个字符出现的次数为权值建立哈夫曼树,这样每个字符可以用从树根到该字符所在到叶子节点的路径来表示。(左为0,右为1)压缩第二步: 哈夫曼编码有一个很重要的特性:每个字符编码不会成为另一个编码的前缀。这个特性保证了即使我们把不同长度的编码存在一起,仍然也可以把它们分离开,不会出现认错人的冲突。 那么我们就可以把所有

2015-12-30 01:01:53 15519 2

原创 C++实现大数除法

题外话 大数除法无疑是大数操作里最麻烦的一项,写大数不实现除法无异于画龙无鳞。思路 最原始的,脑子最容易冒出来的思路,是一下一下的减,看能累计减多少次,最后的总次数就是结果,但这样的效率实在太慢。但我们可以一次性减去 除数的1,10,100,1000倍,只要它在当前倍数下比被除数小。 例如 1210 3 ,121大于300,我们直接剪去300,给结果加100,这样的话,减的次数会大

2015-12-25 16:09:56 11672 3

原创 c++实现大数乘法

思路 第i位数乘第j位数,乘积是第i+j位数(从0开始) 如123*456 乘积各位数为 个位 3*6 十位 2*6 + 3*5 百位 2*5 + 1*6 + 3*4 千位 1*5 + 2*4 万位 1*4然后从后往前,取余更新。代码#include <stdio.h>#include <iostream>#include <vector>

2015-12-22 00:51:44 8369

原创 c++实现大数加法(含负数)

题外话 一直想好好的把所有大数操作好好敲一遍,都止于惰性,碰到一个要用到大数的题,索性就由此开始吧。 大数加法写过太多次了,含负数的第一次写,用运算符重载的形式实现,挺有意思。思路 当两数符号相同时,相加即可,重点内容结果符号不变。 不同时,需要对两数的绝对值进行比较,结果符号与绝对值大的数符号相同,然后用大的减去小的。代码#include <stdio.h>#includ

2015-12-21 23:11:10 6344 4

原创 51Nod 1454 升排列

1454 升排列题目来源: CodeForces基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 收藏 关注定义长度为n的排列为数组 p = [p1, p2, ..., pn] ,这个数组包含n个整数,他们都在1到n之间,并且两两不同。我们说这个排列把1映射到 p1 ,2映射到 p2 ,依此类推。下面介绍一下排列的循环表示。一个环是一串数字,这一串数字中每一个数字被映射到下一个数字,最后一个数字被映射到第一个数字。排列p的循环表示是由一系列的环构成的。比如排列p

2015-12-21 18:48:59 1012 1

原创 51Nod 1191 消灭兔子 (贪心+优先队列)

题目链接:消灭兔子题目大意 n个兔子,每个兔子都有一个血量b[i] m种箭(每种各一支),每种箭都有伤害值d[i]和价格p[i] 每个兔子只能被射一次,伤害值大于血量则死,每种箭只能用一次 问杀死所有兔子需要的最小价格为多少,若不能杀死,则No Solution m,n小于50000)思路 典型的贪心,每个兔子只能射一次,所以只能用伤害值大于其血量的箭,在此前提下,

2015-12-18 16:43:22 1219

原创 51Nod 1163 最高的奖励(贪心+优先队列 & 并差集)

题目链接:最高的奖励题目大意 有N个任务,每个任务有一个最晚结束时间以及一个对应的奖励。在结束时间之前完成该任务,就可以获得对应的奖励。完成每一个任务所需的时间都是1个单位时间。有时候完成所有任务是不可能的,因为时间上可能会有冲突,这需要你来取舍。求能够获得的最高奖励。 Input 第1行:一个数N,表示任务的数量(2 <= N <= 50000) 第2 - N + 1行,每行

2015-12-18 03:55:12 1103

原创 UVA - 10384 推门游戏(IDA*+剪枝)

题目链接 题意 求最少需要几次乘除法可以从x得到x^n?思路 也就是求1经过最少加减可以得出n 序列初始只有1,每次选任意两数进行加减,加入序列 使用IDA*迭代加深搜索剪枝条件 当前序列最大值*(2^max-步数) < n 即后边步数一直按最快的求法仍然比n小优化方案 1.迭代的max值不从1开始,而是从log(n)开始 2.每次只对最大值进行加

2015-12-17 17:28:16 1317 1

原创 UVA - 1374 Power Calculus(IDA*+剪枝)

题目链接 题意 求最少需要几次乘除法可以从x得到x^n?思路 也就是求1经过最少加减可以得出n 序列初始只有1,每次选任意两数进行加减,加入序列 使用IDA*迭代加深搜索剪枝条件 当前序列最大值*(2^max-步数) < n 即后边步数一直按最快的求法仍然比n小优化方案 1.迭代的max值不从1开始,而是从log(n)开始 2.每次只对最大值进行加

2015-12-16 05:04:19 809

原创 51Nod 1376 最长递增子序列的数量(dp+树状数组)

题目链接最长递增子序列的题做个不少,让求数量的第一次做,O(n^2)的代码很好写,但数据范围50000,故无情超时,想了很久,总算有所得。时间: O(nlog(n)) 空间: O(2*n)思路 O(n^2)的思路中,每次求以第i个数结尾的最大长度和记录总数都要对前i-1个数进行遍历比较,如果能把这个比较过程转化为对前i项对求和,就可以用树状数组或线段数进行求和优化了。 重载+,按照题目需

2015-12-16 03:38:13 1910 2

原创 初学A*算法求解静态地图的最短路径

以前所接触过的最短路径算法是dijkstra或floyd之类的,都是在已知每两点之间距离的情况下求最短路的。那么想一下这样的案例 给你一个地图,类似于迷宫一样,中间有些障碍物,再给定起点终点,求该两点间最短路,显然,上述两种算法就不适用了,因为提到的迷宫,我们可能会很容易想到广搜bfs,但一次bfs下来实际上求出了起点到所有点的最短路径,但我们只想知道它与终点间的最短路径,也就是说这个方案里有很

2015-12-07 04:13:08 7876

原创 51Nod 1022 石子归并 V2 (划分型dp四边形不等式优化)

石子归并以前做过好几次,是经典划分型dp题之一,一直用的O(n3)的正常dp方法,也从未想过该怎么去优化它。直到昨天做这道题,n的范围由往常的100改为了1000,老方法一直超时,苦不堪言,搜到有个四边形不等式的优化方法,看帖子,画式子,拉着学长帮忙推导,总算是大概弄明白了一点。dp(i,j) = min(dp(i,k)+dp(k+1,j)) + w(i,j);(i < j, i

2015-12-03 03:34:46 2288

原创 51Nod 1459 迷宫游戏

题目链接:迷宫游戏题目 你来到一个迷宫前。该迷宫由若干个房间组成,每个房间都有一个得分,第一次进入这个房间,你就可以得到这个分数。还有若干双向道路连结这些房间,你沿着这些道路从一个房间走到另外一个房间需要一些时间。游戏规定了你的起点和终点房间,你首要目标是从起点尽快到达终点,在满足首要目标的前提下,使得你的得分总和尽可能大。现在问题来了,给定房间、道路、分数、起点和终点等全部信息,你能计算在尽快

2015-12-01 03:02:47 1743

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除