- 博客(101)
- 收藏
- 关注
原创 背包问题
最初形态:01背包问题有i种不同的物品,每种物品有对应的体积w,价值v,我们有一个体积为W的背包,要求每种类型的物品最多只能放一次(0-1)(1)求在背包体积的限制下,可以装下的最大物品价值 dp[i] = Math.max(dp[i, dp[i - w] + v);(2)判断是否恰好可以将背包装满(是否可以把一个数组分成和相等的两部分)dp[0]=true;dp[i]=dp[i...
2019-09-07 09:17:23
217
原创 二分查找
有序+查找(在有序数组中查找某个数,确定某个数应在的位置)正常实现:1.while(l<=r)2.int mid=l+(r-l)/2;3.return -1(正常实现:查找的数一定存在于数组)https://github.com/CyC2018/CS-Notes/blob/master/notes/Leetcode%20%E9%A2%98%E8%A7%A3%20-%20%...
2019-09-06 18:36:23
294
原创 回溯法
带剪枝操作的dfs(用于寻找所有解集)1.递归出口(满足最后条件跳出递归)2.站在此节点,遍历所有可能的选择(理解成解集树,比如在一个矩阵里,从某一个节点出发,有上下左右四种选择。一般用for循环遍历,将总问题分解成一个个相同的子问题)3.回溯的核心。体现在如何剪枝①最常见的就是在进行下一步递归前执行list.add(),最后在return之前执行list.remove(),从而实...
2019-09-06 18:25:40
247
转载 优化sql语句的一些方法
原文:https://blog.csdn.net/jie_liang/article/details/77340905在sql查询中为了提高查询效率,我们常常会采取一些措施对查询语句进行sql优化,下面总结的一些方法,有需要的可以参考参考。1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 2.应尽量避免在 wh...
2019-02-27 17:44:36
237
转载 高性能缓存更新的模式
原文:https://blog.csdn.net/tTU1EvLDeLFq5btqiK/article/details/78693323Cache Aside Pattern这是最常用最常用的pattern了。其具体逻辑如下:失效:应用程序先从cache取数据,没有得到,则从数据库中取数据,成功后,放到缓存中。命中:应用程序从cache中取数据,取到后返回。更新:先把数据存到数据...
2019-02-25 21:36:59
298
原创 hdoj 1007 Quoit Design(分治法)
题意:给你n个点,让你求出n个点里距离最近的两点距离。思路:分治法先把点按照坐标y进行排序,划分为上下两部分,最近点对有三种情况,都在上半部分,都在下半部分,上下都有递归求出都在上边和都在下边的情况,选一个最小值m1。然后求出两边都有的情况。代码如下:#include#include#include#includeusing namespace std;struc
2017-07-04 10:59:16
591
原创 hdoj1100 Trees Made to Order(递归+卡特兰数,关于卡特兰数的讲解)
来源:http://acm.hdu.edu.cn/showproblem.php?pid=1100卡特兰数的讲解:http://www.cnblogs.com/code-painter/p/4417354.html设a[],a[i]表示i个节点能表示的二叉树数量设b[],b[i]表示节点数小于等于i时所能表示的所有二叉树数量,既b[i]=b[i-1]+a[i]有关二叉树数量计算
2017-06-26 11:33:12
578
原创 hdoj1108 最小公倍数(zz)
来源:http://acm.hdu.edu.cn/showproblem.php?pid=1108求最小公倍数#include#includeusing namespace std;int gcd(int a,int b){ int c; while(b) { c=a%b; a=b; b=c; } return a;}int main(){ int a
2017-06-25 16:20:17
447
原创 hdoj1106 排序(简单的对字符串的处理)
来源:http://acm.hdu.edu.cn/showproblem.php?pid=1106用字符串存储输入的数据,然后将字符子串转化为整数。代码如下:#include#include#include#includeusing namespace std;int a[1000];int change(string str) { int l,i,j,sum; l=
2017-06-24 10:25:34
386
原创 hdoj1102 Constructing Roads(最小生成树)
来源:http://acm.hdu.edu.cn/showproblem.php?pid=1102求最小生成树,我这里用的是prim算法(数据结构里的背过的模版)将已经有路的村庄之间的距离设为0.代码如下:#include#include#include#define INF 0x7ffffffusing namespace std;int main(){ int m
2017-06-23 13:13:18
419
原创 hdoj1099 Lottery(简单的数学问题变相考察最小公倍数)
来源:http://acm.hdu.edu.cn/showproblem.php?pid=1099题目很难看懂,大意是求数学期望
2017-06-23 09:54:34
697
原创 hdoj1098 Ignatius's puzzle(数论)
来源:http://acm.hdu.edu.cn/showproblem.php?pid=1098先给出费马小定理:假如a是整数,p是质数,且a,p互质(即两者只有一个公约数1),那么a的(p-1)次方除以p的余数恒等于1。题意:f(x)=5*x^13+13*x^5+k*a*x,给定k,求最小非负数a,对于任意整数x都满足f(x)|65.65=13*5,13和5都是质数,要使f(x)|
2017-06-22 10:30:54
332
原创 hdoj1097 A hard puzzle(简单题)
来源:http://acm.hdu.edu.cn/showproblem.php?pid=1097关键在于如何解决超时问题。我们首先取a的个位数,然后判断b是否大于10000,小于10000则直接循环计算。如果大于10000,我们算出b为10000时,a^b的个位数t1,然后进行对t1进行(b/10000)次循环,得到一个数再进行
2017-06-21 17:15:20
410
原创 hdoj1089~hdoj1096 A+B问题(输入输出的格式)
就是考察输入输出的格式:1089#includeint main(){ int a,b; while(~scanf("%d%d",&a,&b)) { printf("%d\n",a+b); } return 0;} 1090#includeint main(){ int a,b,t; scanf("%
2017-06-21 16:14:22
1037
原创 hdoj1008 Elevator(简单运用队列)
来源:http://acm.hdu.edu.cn/showproblem.php?pid=1008运用队列,先进先出。代码如下:#include#include#include#includeusing namespace std; int main() { int n,sum,i,j; queue q; while(scanf("%d",&n)&&n) {
2017-06-21 16:07:27
343
原创 hdoj1006 Tick and Tick(数学问题,解不等式,求并集)
来源:http://acm.hdu.edu.cn/showproblem.php?pid=1006看秒针的转动,一分钟一分钟的算#include#include#includeusing namespace std;struct range//取值范围 { double l,r;};double d;range work(double a,double b)//求 d<=
2017-06-21 11:10:27
603
原创 hdoj1002 A + B Problem II(简单的大数处理)
来源:http://acm.hdu.edu.cn/showproblem.php?pid=1002用字符串的形式输入输出,先倒置字符串使每位能够对应相加,大于‘9’的那位需要进行进位处理代码如下:#include#include#includeusing namespace std;char c[1005],a[1001],b[1001];void change(char c
2017-06-20 16:53:03
511
原创 hdoj1001 Sum Problem(细心点)
来源:http://acm.hdu.edu.cn/showproblem.php?pid=1001注意题目要求最后结果不能超过32位,所以我设的long long64位类型。代码如下#includeint main(){ long long n,sum; while(~scanf("%lld",&n)) { sum=(1+n)*n/2; printf("%lld\n\
2017-06-19 16:54:25
341
原创 hdoj1005 Number Sequence(找规律)
来源:http://acm.hdu.edu.cn/showproblem.php?pid=1005很明显找规律的题目,因为它给出的n太大,遍历的话一定会超时。代码如下:#include#include#includeusing namespace std;int t[90000001];int main(){ int a,b,n,i,cycle,j; while(~sc
2017-06-19 10:36:23
325
原创 hdoj1004 Let the Balloon Rise(map)
来源:http://acm.hdu.edu.cn/showproblem.php?pid=1004map的运用#include#include#include#includeusing namespace std;mapm;int judge(string str){ map::iterator it; it=m.find(str); if(it==m.end())re
2017-06-17 22:06:23
282
原创 hdoj1088 Write a simple HTML Browser(在于细心)
来源:http://acm.hdu.edu.cn/showproblem.php?pid=1088考察格式。空格同样计入长度。代码如下#include#include#includeusing namespace std;int main(){ char str[90]; int i,len,k;len=0;k=0; while(~scanf("%s",str))
2017-06-14 20:33:08
339
原创 hdoj1087 Super Jumping! Jumping! Jumping!(简单的DP)
来源:http://acm.hdu.edu.cn/showproblem.php?pid=1087求最大递增字段和dp[i]=max{dp[j]}+a[i].-1a[j].代码如下:#include#include#include #includeusing namespace std;long long dp[1001],a[1001];int main(){ l
2017-06-14 17:22:45
379
原创 hdoj1086 You can Solve a Geometry Problem too(数学几何题)
来源:http://acm.hdu.edu.cn/showproblem.php?pid=1086有两种思路1.求出某一直线的方程式,将另一线段两端点代入判断正负。2.叉乘的思想这里用的是叉乘的方法(写这个得细心些)代码如下#include#include#include #includeusing namespace std;#define Max 0x7fff
2017-06-14 16:17:26
358
转载 母函数(在他人讲解的基础上添些自己的理解)
转载链接:http://blog.csdn.net/vsooda/article/details/7975485求用1分、2分、3分的邮票贴出不同数值的方案数:大家把这种情况和第一种比较有何区别?第一种每种是一个,而这里每种是无限的。
2017-06-14 10:40:12
320
原创 hdoj1085 Holding Bin-Laden Captive!(又见母函数)
来源:http://acm.hdu.edu.cn/showproblem.php?pid=1085关于母函数的讲解在之前hd1028中提到过。本题反过来求不能组成的最小值数,其实就是在求出c1[]后,找到第一个为0的下标。处理母函数的问题有一套模版,再贴一下有着详细讲解的链接:http://www.cnblogs.com/dolphin0520/archive/2012/11/07/2
2017-06-14 10:21:26
362
原创 hdoj1084 What Is Your Grade?(思路很简单)
来源:http://acm.hdu.edu.cn/showproblem.php?pid=1084感觉我已经用stl走火入魔了,看到这道题需要分别对完成不同题数的学生进行排序,就又想用vector存储,v[i]的i表示的是做出题的题数。代码有点长和拖但很明了。注:对二维数组进行sort()函数排序,可以把数组首地址和末地址+1读入代码如下:#include#include#
2017-06-13 16:20:13
339
原创 hdoj1083 Courses(二分图的最大匹配数)
来源:http://acm.hdu.edu.cn/showproblem.php?pid=1083题目很明显把点分为两类,一类课程,一类学生。让我们检验是否能选出一个完全符合条件的学生委员会:1.委员会的每个学生代表不同的课程(如果学生参加该课程,学生可以代表课程)2.每个课程都有委员会的代表二分图的最大匹配数呼之欲出,当匹配数等于课程数时满足条件注:这次用的是ve
2017-06-13 10:27:21
418
原创 hdoj1082 Matrix Chain Multiplication(栈的运用)
来源:http://acm.hdu.edu.cn/showproblem.php?pid=1082感觉自己做复杂了,还用了map。代码如下:#include#include#include#include #includeusing namespace std;struct matr{ int m,n;};map alp;int main(){ matr te
2017-06-12 19:21:32
308
原创 hdoj1081 To The Max(类比于一维最大字段和)
来源:http://acm.hdu.edu.cn/showproblem.php?pid=1081题意:输入一个n*n的矩阵,让你选出它的一个子矩阵,使得这个子矩阵的数值之和最大,输出这个最大值。思路:我们设a[][],用a[i][j]表示第i行前j个数之和,因此a[k][j]-a[k][i-1](j>=i)表示第k行i列到j列数字之和。因此我们可以用三层循环,前两层用来框定i列到j列
2017-06-12 16:15:38
325
原创 hdoj1080 Human Gene Functions(DP解决LCS问题!)
来源:http://acm.hdu.edu.cn/showproblem.php?pid=1080类似于求最长公共字串,在dp的初始化和状态转移方程的书写上有少许差别。dp[i][j] = dp[i-1,j] + dist[s1[i],'-'];2、 s1取“ - ”,s2取第j个字母:dp[i][j] = dp[i,j-1] + dist['-',s2[j]];3、 s1取第i个
2017-06-12 11:19:48
316
原创 hdoj1078 FatMouse and Cheese(记忆化搜索)
来源:http://acm.hdu.edu.cn/showproblem.php?pid=1078一开始把最多走k步理解成每走一步有四种方向的选择,所以就思考把图转化为一个按奶酪数排序的一维数组对这个一维数组进行深搜,最后得到了结果但超时了。后面借鉴了一下别人的代码,发现走k步是只能连续横着走或者竖着走,这就可以用通常的遍历手段,再加上动态规划的思想进行解题。有关记忆化搜索的解答:
2017-06-11 17:41:09
365
原创 hdoj1079 Calendar Game(分析奇偶,找规律,博弈)
来源:http://acm.hdu.edu.cn/showproblem.php?pid=1079参考了别人的我们首先要认清的是,在这种博弈问题上,一开始处于优势的一方一定会努力保持自己的优势,而处于劣势的一方肯定在不断寻找翻盘点。这题没有很复杂的规则。最后日期是2001.11.4,设y表示年份,m表示月份,d表示天数。temp=m+d
2017-06-11 11:41:19
366
原创 hdoj1077 Catching Fish(几何题,枚举遍历)
来源:http://acm.hdu.edu.cn/showproblem.php?pid=1077可以由两个点确定两个圆心。圆心与两个点的距离为1,画图易知,圆心位于两点连线的中垂线上,本题的关键就在于求出圆心坐标。存在两种情况1.当两点的y值相等。2.当两点的y值不等。具体见代码:#include#include#include using namespace
2017-06-11 10:21:53
546
原创 hdoj1076 An Easy Task(简单题)
来源:http://acm.hdu.edu.cn/showproblem.php?pid=1076简单的判断第n个闰年的年份。#includeusing namespace std;int main(){ int t,i,j; scanf("%d",&t); int y,n; while(t--) { scanf("%d%d",&y,&n); while(1)
2017-06-10 12:45:54
356
原创 hdoj1075 What Are You Talking About(STL map处理字符串)
来源:http://acm.hdu.edu.cn/showproblem.php?pid=1075运用map处理问题具体见代码注释#include#include #include#include#include using namespace std;map m;string s;int search(string key) //用来判断map里是否存在key值 {
2017-06-10 11:11:32
302
原创 hdoj1074 Doing Homework(好题呀,状态压缩+DP)
来源:http://acm.hdu.edu.cn/showproblem.php?pid=1074参考了网上的代码,然后自己又重新敲了一遍。需要用到状态压缩,压成二进制来表示不同的状态。有关状态压缩的讲解:http://www.cnblogs.com/avril/archive/2013/08/26/3282295.html几点要点:1.如果不用状态压缩,直接穷举,最多会有15!种
2017-06-09 18:24:58
392
原创 hdoj1073 Online Judge(对字符串的操作问题)
来源http://acm.hdu.edu.cn/showproblem.php?pid=1073模拟简单的oj系统,考察对字符串的操作,关键在于如何成功的把数据都存入字符串。代码如下:#include#include #include#include using namespace std;string change(string a)//剔除' ','\t','\n' {
2017-06-09 10:36:48
395
原创 hdoj1072 Nightmare(bfs寻找最短时间)
来源:http://acm.hdu.edu.cn/showproblem.php?pid=1072创建了一个点的结构体point用来存储当前坐标和剩余时间及已花费的时间。很重要的一点就是你得存储到每个点时剩余的时间,这个值由上一个点及自己当前的值确定。开始没有ac的原因是在经过值为4的点后没有将4变为1,从而陷入死循环,以后要特别注意!代码如下:#include#include
2017-06-08 21:21:08
514
转载 什么时候用DFS,什么时候用BFS?(DFS和BFS的特点和异同)
什么时候用DFS,什么时候用BFS?二维数组的题目,N小于20的,适用DFS。而一般 N<= 200,N这种,一定不可能用DFS去做。而且并不只是整个题目不能用DFS,其中的每一步也不能使用DFS。BFS的基本步骤1.将初始点(一个或多个)加入一个集合尾2.从集合头取出点,判断初始点的周
2017-06-08 16:11:42
5083
原创 hdoj1071 The area(数学题,积分)
来源:http://acm.hdu.edu.cn/showproblem.php?pid=1071y=ax*x+bx+c。给了你三个点,其中一个还是顶点,可以根据顶点和其他两点中的一点求出a,b,c的值。在根据列出的积分式代入求解。#include#include #include #includeusing namespace std;int main(){ int t
2017-06-08 15:48:29
385
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人