算法题目
阿不灌的拉
这个作者很懒,什么都没留下…
展开
-
重编码 ---huffman编码练习
问题描述 有一篇文章,文章包含 n 种单词,单词的编号从 1 至 n,第 i 种单词的出现次数为 w[i]。 现在,我们要用一个 2 进制串(即只包含 0 或 1 的串) s[i] 来替换第 i 种单词,使其满足如下要求:对于任意的 1≤i,j≤n(i≤j),都有 s[i] 不是 s[j] 的前缀。(这个要求是为了避免二义性) 你的任务是对每个单词选择合适的 s[i],使得替换后的文章总长度...原创 2018-08-13 21:43:42 · 309 阅读 · 0 评论 -
poj3666 dp + 离散化
题目大意: 农夫约翰想修一条尽量平缓的路,路的每一段海拔是A_i,修理后是B_i,花费|A_i – B_i|,求最小花费。 最小花费有可能是单调非降,也有可能是单调非增,因为题目数据比较水,只求单调非降就可以 第一步 定义dp数组意义,dp[i][j]表示前i段路,最大值为j的cost,那么很自然的得到递推式 dp[i][j] = min( dp[i-1][ k ] ( ...原创 2019-02-09 17:50:05 · 229 阅读 · 0 评论 -
poj3181 完全背包三维转二维优化 + 滚动数组 + 高精度数处理
好久没写博客,感觉写题还是用博客总结效果好一点。以后会坚持写下去的 题意:给你两个整数 N和K,让求利用1到k这些数(每个数的数量不限),拼成N有多少种方案。 显而易见这是一个完全背包问题。我们将dp[i][j]定义如下:由前i个数拼成j有多少种方案。 对于每一种i和j的不同取值,有 dp[i][j](前i个数拼成j的方案数) = dp[i-1][j](第i种数一个也不用的方案数) ...原创 2019-02-07 16:38:15 · 269 阅读 · 0 评论 -
贪心算法——任务安排
给定一台有m个储存空间的单进程机器; 现有n个 请求:第i个请求计算时需要占用R[i]个空间,计算完成后,储存计算结果需要占用O[i]个空间(其中O[i]<R[i])。问如何安排 这n个请求的顺序,使得所有请求都能完成。 如:m=14,n=2,R[1,2]=[10,8],O[1,2]=[5,6]。可以先运行第一个任务,计算时占用10个空间,计算完成后占用5个空间,剩余9个空间执行第二个...原创 2018-10-24 20:26:53 · 3405 阅读 · 0 评论 -
用O(nlogn)求特定的最长公共子序列
时间限制:1 sec 空间限制:256 MB 问题描述 给定两个 1 到 n 的排列 A,B (即长度为 n 的序列,其中 [1,n] 之间的所有数都出现了恰好一次)。 求它们的最长公共子序列长度。 输入格式 第一行一个整数 n ,意义见题目描述。 第二行 n 个用空格隔开的正整数 A[1],⋯,A[n],描述排列 A。 第三行 n 个用空格隔开的正整数 B[1],⋯,B[n],描述排...翻译 2018-10-16 20:28:00 · 922 阅读 · 0 评论 -
背包问题拓展(前缀背包后缀背包)
描述 n个物品,每个物品有一个体积v和价值w。现在你要回答,把一个物品丢弃后,剩下的物品装进一个大小为V的背包里能得到的最大价值是多少。 输入 输入的第一行包含一个正整数n(n ≤ 5000)。 接下来n行,每行包含两个正整数v和w(v,w ≤ 5000),分别表示一个物品的体积和价值。 接下来一行包含一个正整数q(q ≤ 5000),表示询问个数。 接下来q行,每行包含两个正整数V和...原创 2018-10-10 16:54:06 · 1018 阅读 · 0 评论 -
单调栈应用POJ3250 + 单调序列
参考:https://blog.csdn.net/zuzhiang/article/details/78134247 单调栈,顾名思义,是栈内元素保持一定单调性(单调递增或单调递减或是其他性质)的栈。 我们假如有这样一个问题(poj3250):给定一组数,针对每个数,寻找它和它右边第一个比它大的数之间有多少个数。 如果用朴素的解法就会是双层for循环遍历,时间复杂度达到O(n^2),利用单调...原创 2018-09-25 21:16:59 · 273 阅读 · 0 评论 -
匈牙利算法(最小点覆盖)poj3041
题目意思是一次可以毁掉一行或者一列,要求至少毁多少次才能将图上的x都消灭掉。 简单的解释一下最小点覆盖:在图中用最少的点,覆盖图中所有的边 将每一行或者列想象成点,每个x想象成一条边,于是此题很自然的转换成为了最小点覆盖问题。 而二分图的最小点覆盖数 = 二分图的最大匹配。 于是就用匈牙利算法求这个图的最大匹配就好啦。 用人和座位分别表示二分图的x集和y集,于是匈牙利算法大概每一趟过程可...原创 2018-09-18 21:18:34 · 639 阅读 · 0 评论 -
算法题目:大转盘
问题描述 邓老师有一个大转盘,被平分成了 2^n 份。 邓老师还有一个长度为 2^n 的数组 a(下标从 0 开始),其中的每个元素都是 0 或 1。于是邓老师就可以选择大转盘上的一个位置,将 a[0] 填入其中,然后按顺时针顺序依次将 a[1],a[2],…,a[2^n-1] 填入。 对于大转盘上的一个指定位置,邓老师可以从它开始,取出顺时针方向的 n 个位置,并将它们按原顺序拼接起来,得...原创 2018-08-28 20:00:21 · 1016 阅读 · 0 评论 -
nyoj 44 子串和【最大子串和】
题目链接:http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=44 常见的做法有:枚举区间、动态规划等。 昨天突然想到了一个O(n)的算法,拿来分享给诸位 我们从后向前看这串数字 5 6 -2 3 -5 发现倒数第一位就是负数(-5),毫无疑问,这个负数肯定不在我的最大子串和里,因为我们舍去它并不会影响我们链接其它有价值的数,所以我们将它抛弃...原创 2018-08-27 17:26:37 · 566 阅读 · 1 评论 -
洛谷p1047树状数组
看到有树状数组的解法就以为是用区间更新区间查询做的,结果怎么都想不到怎么样来实现树最多割一次。 看了一下别人的题解,才顿悟:不是题目有区间更新区间查询就必须维护一个区间更区间查的树状数组。。 这道题应该用区间更单点查的树状数组。太不灵活了 需要注意的有两点吧 1,树状数组的最低下标只能是1,不能是0,这道题的区间范围是从0开始,所以要整体的把区间向后移动一位,把1当0,1当2 2,用差分...原创 2019-05-08 23:23:51 · 335 阅读 · 2 评论