算法
骑鱼的喵喵
多学多练,持续进步。
展开
-
Piggy-Bank 完全背包
2123: Piggy-Bank题目描述Before ACM can do anything, a budget must be prepared and the necessary financial support obtained. The main income for this action comes from Irreversibly Bound Money (IBM). T...原创 2019-06-20 15:11:16 · 223 阅读 · 0 评论 -
珍惜现在,感恩生活 多重背包
题目描述急!灾区的食物依然短缺!为了挽救灾区同胞的生命,心系灾区同胞的你准备自己采购一些粮食支援灾区,现在假设你一共有资金n元,而市场有m种大米,每种大米都是袋装产品,其价格不等,并且只能整袋购买。请问:你用有限的资金最多能采购多少公斤粮食呢?------------------------------------------------------------------------...原创 2019-02-20 22:54:19 · 102 阅读 · 0 评论 -
01背包 空间优化
01背包 空间优化O(N)版本 #include<stdio.h>#include<algorithm>#define INF 0x7fffffffusing namespace std;struct coin{ int v; int w;}list[505];int dp[10005];int main(){ int e,f; while...原创 2019-02-20 22:22:26 · 202 阅读 · 0 评论 -
采药 01背包
采药题目描述辰辰是个很有潜能、天资聪颖的孩子,他的梦想是称为世界上最伟大的医师。为此,他想拜附近最有威望的医师为师。医师为了判断他的资质,给他出了一个难题。医师把他带到个到处都是草药的山洞里对他说:“孩子,这个山洞里有一些不同的草药,采每一株都需要一些时间,每一株也有它自身的价值。我会给你一段时间,在这段时间里,你可以采到一些草药。如果你是一个聪明的孩子,你应该可以让采到的草药的总...原创 2019-02-19 22:30:34 · 183 阅读 · 0 评论 -
Greedy Tino 动态规划
Greedy Tino题目描述蒂诺写了很长的故事。但!中文... 所以我必须直接告诉你这个问题,并抛弃他漫长的故事。那就是蒂诺想要携带一些带有“携带杆”的橘子,并且他必须使携带杆的两侧重量相同。每个橙子都有它的重量。所以贪婪的蒂诺想要知道他能承受的最大重量。输入第一行输入包含数字t,这意味着有t个测试数据。对于每个测试用例,第一行包含数字n,表示橙子的数量。第二行包含n个数字...原创 2019-02-19 22:26:47 · 235 阅读 · 0 评论 -
搬寝室 动态规划
题目描述搬寝室是很累的,xhd深有体会.时间追述2006年7月9号,那天xhd迫于无奈要从27号楼搬到3号楼,因为10号要封楼了.看着寝室里的n件物品,xhd开始发呆,因为n是一个小于2000的整数,实在是太多了,于是xhd决定随便搬2*k件过去就行了.但还是会很累,因为2*k也不小是一个不大于n的整数.幸运的是xhd根据多年的搬东西的经验发现每搬一次的疲劳度是和左右手的物品的重量差的平方成正...原创 2019-02-19 22:25:41 · 130 阅读 · 0 评论 -
表达式求值 自己实现的坑
表达式求值题目描述:对于一个不存在括号的表达式进行计算输入:存在多种数据,每组数据一行,表达式中数字后存在空格输出:输出结果样例输入:6 / 2 + 3 + 3 * 4样例输出:18wc,这个题,自己实现有很多很多坑1.运算符优先级,自己的优先级小于自己!矩阵0多1少2. 如果表达式中有空格,一定使用gets读取表达式!!3.注意可能会需要使用do...原创 2019-02-28 21:49:00 · 239 阅读 · 0 评论 -
高精度减法
高精度减法题目描述输入两个正整数,输出第一个数减去第二个数的差,可能是整数,负数或0。输入输入文件只有两行,第一行一个整数x,第二行一个整数y。其中0<=x<=10200,0<=y<=10200输出输出文件有1行,第一个数减去第二个数的差。高精度减法注意两点:1.大数减小数2.消除前导0#include<stdio.h>...原创 2019-02-28 21:47:14 · 335 阅读 · 0 评论 -
高精度乘以高精度模板
高精度乘法:高精度乘以高精度题目描述 高精度乘法。输入两个正整数,求它们的积。输入 两行,每行为一个高精度整数,长度不超过255。输出 一行,相乘的结果。做题一定要注意边界情况。#include<stdio.h>#include<string.h>using namespace std;char str1[265];c...原创 2019-02-24 23:16:33 · 1030 阅读 · 0 评论 -
高精度乘以低精度模板
高精度乘低精度整数 高精度乘低精度整数:输入一个高精度整数和一个低精度整数,求它们的乘积。输入 两行,第一行为高精度整数a,长度不超过255;第二行低精度整数m。输出 一行,相乘的结果。做题一定要注意边界情况。这题的边界就是0。#include<stdio.h>#include<string.h>using namespac...原创 2019-02-24 23:15:22 · 1564 阅读 · 1 评论 -
高精度加法模板
高精度加法 题目描述 高精度加法。输入两个正整数,求它们的和。输入 两行,每行为一个高精度整数(非负数,长度不超过255)输出 一行,相加的结果。#include<stdio.h>#include<string.h>using namespace std;char str1[265];char str2[265]...原创 2019-02-24 23:14:26 · 126 阅读 · 0 评论 -
霍夫曼树:最优二叉树
题目描述哈夫曼树,第一行输入一个数n,表示叶结点的个数。需要用这些叶结点生成哈夫曼树,根据哈夫曼树的概念,这些结点有权值,即weight,题目需要输出所有结点的值与权值的乘积之和。输入输入有多组数据。每组第一行输入一个数n,接着输入n个叶节点(叶节点权值不超过100,2<=n<=1000)。输出输出权值。代码如下:#include<stdio.h&...原创 2019-02-13 22:37:08 · 323 阅读 · 0 评论 -
piggy bank 完全背包
题目描述Before ACM can do anything, a budget must be prepared and the necessary financial support obtained. The main income for this action comes from Irreversibly Bound Money (IBM). The idea behind is ...原创 2019-02-20 23:00:57 · 170 阅读 · 0 评论 -
无穷大INF尽量设置成0x3f3f3f3f 就是0x四个3f 而不是0x7ffffff
在算法竞赛中,我们常常需要用到一个“无穷大”的值,对于我来说,大多数时间我会根据具体问题取一个99999999之类的数(显得很不专业啊!)在网上看别人代码的时候,经常会看到他们把INF设为0x7fffffff,奇怪为什么设一个这么奇怪的十六进制数,一查才知道,因为这是32-bit int的最大值。如果这个无穷大只用于一般的比较(比如求最小值时min变量的初值),那么0x7fffffff确实是一...转载 2019-02-21 10:39:54 · 543 阅读 · 0 评论 -
最长公共子序列
最长公共子序列问题题目描述Find a longest common subsequence of two strings.输入First and second line of each input casecontain two strings of lowercase character a…z. There are no spaces before, inside or a...原创 2019-06-04 09:24:17 · 116 阅读 · 0 评论 -
从内到外的螺旋遍历 :蛇形矩阵
给定一个包含 nxn个元素的矩阵,请按照逆时针螺旋顺序,返回矩阵中的所有元素。(蛇形矩阵:小明玩一个数字游戏,取个n行n列数字矩阵(其中n为不超过100的奇数),数字的填补方法为:在矩阵中心从1开始以逆时针方向绕行,逐圈扩大,直到n行n列填满数字)示例1:输入:[ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ]]输出: [5,6,3,2...原创 2019-06-05 20:49:34 · 1749 阅读 · 0 评论 -
leetcode 螺旋矩阵
给定一个包含mxn个元素的矩阵(m行,n列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。示例1:输入:[ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ]]输出: [1,2,3,6,9,8,7,4,5]示例2:输入:[ [1, 2, 3, 4], [5, 6, 7, 8], [9,10,11,12]]...原创 2019-06-05 20:42:00 · 323 阅读 · 0 评论 -
最大公约数
#include<iostream>#include<cstring>using namespace std;int gcd(int a,int b){ if(a==0) { return b; } else if(b==0) { return a; } else{ return gcd(b,a%b); } }int main(...原创 2019-05-22 18:51:00 · 98 阅读 · 0 评论 -
进制转换
1942: 数制转换时间限制:1 Sec内存限制:32 MB题目描述求任意两个不同进制非负整数的转换(2进制~16进制),所给整数在long所能表达的范围之内。不同进制的表示符号为(0,1,...,9,a,b,...,f)或者(0,1,...,9,A,B,...,F)。输入输入只有一行,包含三个整数a,n,b。a表示其后的n 是a进制整数,b表示欲将a进制整数n转换...原创 2019-05-22 18:50:22 · 134 阅读 · 0 评论 -
进制转换:十进制-》n进制
1941: 又一版 A+B时间限制:1 Sec内存限制:32 MB题目描述输入两个不超过整型定义的非负10进制整数A和B(<=231-1),输出A+B的m (1 < m <10)进制数。输入输入格式:测试输入包含若干测试用例。每个测试用例占一行,给出m和A,B的值。当m为0时输入结束。输出输出格式:每个测试用例的输出占一行,输出A+B的m进...原创 2019-05-22 18:47:25 · 498 阅读 · 0 评论 -
数值转换复习
1906: 特殊乘法时间限制:1 Sec内存限制:32 MB题目描述写个算法,对2个小于1000000000的输入,求结果。特殊乘法举例:123 * 45 = 1*4 +1*5 +2*4 +2*5 +3*4+3*5输入两个小于1000000000的数输出输入可能有多组数据,对于每一组数据,输出Input中的两个数按照题目要求的方法进行运算后得到的结果。...原创 2019-05-22 18:43:31 · 114 阅读 · 0 评论 -
恶搞指数
1021: 恶搞指数题目描述小明的朋友过生日,小明准备了一件礼物,不过小明想恶搞一下他的朋友,所以他准备了一堆盒子,其中有一个盒子里面装了礼物。盒子里面可以再放零个或者多个盒子。假设放礼物的盒子里不再放其他盒子。用()表示一个盒子,B表示礼物,小明想让你帮他算出恶搞指数,即最少需要拆多少个盒子才能拿到礼物。输入输入包含多组测试数据。每组测试数据是一个长度不大于1000,只包含(,...原创 2019-05-11 00:06:41 · 616 阅读 · 0 评论 -
出栈合法性
1094: 出栈合法性题目描述已知自然数1,2,...,N(1<=N<=100)依次入栈,请问序列C1,C2,...,CN是否为合法的出栈序列。输入输入包含多组测试数据。每组测试数据的第一行为整数N(1<=N<=100),当N=0时,输入结束。第二行为N个正整数,以空格隔开,为出栈序列。输出对于每组输入,输出结果为一行字符串。如给出的序列是合法...原创 2019-05-11 00:04:23 · 2185 阅读 · 0 评论 -
带括号的表达式计算
题目描述算数四则运算的规则是1)先乘除,后加减;2)从左算到右;3)先括号内,后括号外。由此,算式4+2*3-10/5的计算顺序为4+2*3-10/5=4+6-10/5=4+6-2=8。给定一个以“#”作为结束符的算式,求出算式的结果。输入以“#”结尾的表达式,运算数为正整数。每个表达式占一行。输出输出表达式运算的结果。样例输入4+2*3-10/5#3...原创 2019-05-10 23:56:52 · 2453 阅读 · 0 评论 -
计算表达式
题目描述对于一个不存在括号的表达式进行计算输入存在多种数据,每组数据一行,表达式不存在空格输出输出结果样例输入6/2+3+3*4734/2-56*2-7*8样例输出18199#include<iostream>#include<stack>#include<cstring>#include<st...原创 2019-05-10 23:54:03 · 177 阅读 · 0 评论 -
快速排序:三个注意点
O(n*logn)的快排,交换啊a[i]和a[j]之前,一定要保证i<j每次递归都要保证l<r,防止数组越界#include<iostream>#include<algorithm>using namespace std;int a[100]; int n;//三个注意点,每个都必须要写对,否则就报错,一定要保证l<r,i<...原创 2019-05-06 20:59:25 · 445 阅读 · 0 评论 -
二叉树的遍历
题目描述二叉树的前序、中序、后序遍历的定义:前序遍历:对任一子树,先访问跟,然后遍历其左子树,最后遍历其右子树;中序遍历:对任一子树,先遍历其左子树,然后访问根,最后遍历其右子树;后序遍历:对任一子树,先遍历其左子树,然后遍历其右子树,最后访问根。给定一棵二叉树的前序遍历和中序遍历,求其后序遍历(提示:给定前序遍历与中序遍历能够唯一确定后序遍历)。输入两个字符串,其长度n均小于...原创 2019-02-13 22:36:11 · 98 阅读 · 0 评论 -
表达式求值
题目描述:对于一个不存在括号的表达式进行计算输入:存在多种数据,每组数据一行,表达式中数字后存在空格输出:输出结果样例输入:6 / 2 + 3 + 3 * 4样例输出:18#include<iostream>#include<stack>using namespace std;stack<int> op;sta...原创 2019-02-13 22:34:55 · 94 阅读 · 0 评论 -
高精度加法
通过自己实现bigInteger类实现的高精度加法 #include<stdio.h>#include<string.h>using namespace std;/*高精度整数大数bigInteger类 每4位数字为一个单位保存于digit数组中size代表还未占用的单元 以123456789为例 digit[0]=6789digit[1]=234...原创 2019-02-15 22:57:27 · 74 阅读 · 0 评论 -
分解质因数
求一个数的所有质因数#include<stdio.h>using namespace std;int primeSize=0;//素数只筛到sqrt(n)也是有原因的// 大于sqrt(n)的质因子可能有 ,但是如果有最多只有一个 int prime[100001];int mark[100001];//素数筛预处理 void init(){ prim...原创 2019-02-15 22:55:30 · 198 阅读 · 0 评论 -
二分求幂 快速幂
二分求幂十进制数字转变成二进制取模运算#include<stdio.h>using namespace std;/*二分求幂 OLogN 比O N 的朴素方法快 把幂数由十进制转成二进制 把简单的一次一次累乘 转化成较少个a^(2^k)相乘 乘法次数大大减少 */ int main(){ int a,b; while(scanf("%d%d",...原创 2019-02-15 22:52:15 · 185 阅读 · 0 评论 -
枚举小技巧
枚举的时候注意一个情况:如果有三个数需要枚举,但是这三个数符合一个公式,那么枚举的时候只需要枚举出前两个值即可,第三个数的值由公式以及前两个数的值得到。比如百鸡问题。共有三种鸡,三种鸡的数量分别是x、y和z,三种鸡的数量符合式子:x+y+z=100,那么枚举的时候,只用写两层for循环即可达到目的,节省时间开销,优化时间复杂度。很多时候就是因为多写了一层for循环导致程序运行超时。这个问...原创 2019-02-15 21:04:19 · 171 阅读 · 0 评论 -
彻底搞懂错排问题
问题:现有10本书按照顺序摆放,现要求重新排列,使得新的书的顺序中每一本书都不在原来的位置,求有多少种排列方式?这个问题推广一下,就是错排问题,是组合数学中的问题之一。考虑一个有n个元素的排列,若一个排列中所有的元素都不在自己原来的位置上,那么这样的排列就称为原排列的一个错排。 n个元素的错排数记为D(n)。 研究一个排列错排个数的问题,叫做错排问题或称为更列问题OK,现在详细分析这个问...转载 2019-02-21 14:04:21 · 6265 阅读 · 12 评论 -
素数筛
【问题描述】 输入一正整数n(n<=10000),按顺序输出2到n范围内的所有个位为1的素数prime。prime数组搭配primeSize数字记录素数数量的方法值得学习。#include<stdio.h>using namespace std;//素数集合 int prime[10000];int primeSize=0;int mark[10001];...原创 2019-02-14 22:36:28 · 133 阅读 · 0 评论 -
最大公约数GCD♥最小公倍数LCM
题目描述给定两个数求最小公倍数和最大公约数。输入输入包含多组样例每行包括两个整数a,b(0<a ,b<=10000); 输出每行两个数输出两个数,第一个数是最小公倍数,第二个最大公约数a和b的最大公约数等于 a%b和b 的最大公约数。a*b=GCD*LCM求模运算。#include<stdio.h>using nam...原创 2019-02-14 22:31:12 · 127 阅读 · 0 评论 -
数制转换
题目描述求任意两个不同进制非负整数的转换(2进制~16进制),所给整数在long所能表达的范围之内。不同进制的表示符号为(0,1,...,9,a,b,...,f)或者(0,1,...,9,A,B,...,F)。输入输入只有一行,包含三个整数a,n,b。a表示其后的n 是a进制整数,b表示欲将a进制整数n转换成b进制整数。a,b是十进制整数,2 =< a,b <= 16。...原创 2019-02-14 22:28:47 · 266 阅读 · 0 评论 -
数位拆解
题目描述:写个算法,对2个小于1000000000的输入,求结果。特殊乘法举例:123 * 45 = 1*4 +1*5 +2*4 +2*5 +3*4+3*5输入: 两个小于1000000000的数输出: 输入可能有多组数据,对于每一组数据,输出Input中的两个数按照题目要求的方法进行运算后得到的结果。样例输入:123 45样例输出:54主要是取模运...原创 2019-02-14 22:25:29 · 120 阅读 · 0 评论 -
for循环技巧1
防止多次重复劳动:原创 2019-02-14 22:22:33 · 245 阅读 · 0 评论 -
高精度乘法
高精度×高精度有特定的规则,不同于高精度×低精度。高精×低精可以通过简单修改高精度加法实现。高精度乘法实现请观察如下代码。 注意大数类在这种情况下size的修改。#include<stdio.h>#include<string.h>using namespace std;struct bigInteger{ int size; int digit[1...原创 2019-02-15 23:01:10 · 99 阅读 · 0 评论 -
计算机1s内计算量
截图:考虑时间复杂度如果时间限制1s内,使用O(n)算法的话,循环最多不能超过一千万次如果O(n**2)算法的话,n不能大于3000如果O(n**3)算法的话,n不能大于500...原创 2019-02-11 11:35:09 · 4453 阅读 · 0 评论