
算法学习
「已注销」
顺其自然
展开
-
【洛谷】P1784 数独解法
此题解法较简单,用了深度优先搜索的思想,缺点是多层函数调用在空间复杂度上较大,暂时未进行改进,C++代码如下:#include <iostream>using namespace std;/*sudoku solverBy Felix Chang*/bool success = false;int nums[9][9];bool check(int key,int ...原创 2019-01-22 15:21:19 · 744 阅读 · 0 评论 -
【机试指南】DP部分
DP问题笔记递推求解最长递增子序列递推求解类似Fbonacci数列,某些问题可以递推方法解决,但得自己推关系。例子:/*N阶楼梯上楼问题:一次可以走两阶或一阶,问有多少种上楼方式。N阶方法为N-1阶方法加N-2阶方法层层倒推即可*/#include<bits/stdc++.h>using namespace std;int main(){ int n; ...原创 2019-05-11 21:36:14 · 208 阅读 · 0 评论 -
记录一次长达一小时的bug调试
记录一次长达一小时的bug调试下面输入的城市编号是从1开始的,而flag却只开了n个,编号10就无法成功写入数组范围内。因为这个错误非常小,而参考别人代码的时候根本不会在乎数组开大开小的问题,所以调试了很长时间。以后注意,数组一定开大点,浪费一点儿空间根本不会有什么问题,为什么非得节约到极致呢?#include<bits/stdc++.h>using namespace std...原创 2019-03-28 15:17:58 · 208 阅读 · 0 评论 -
并查集kruskal最小生成树
并查集kruskal最小生成树来自刘汝佳《算法竞赛入门经典》这里判断是否在一个集合中不要一上来就set<>,用边数组和对应此边两端的节点,加上节点的并查集就能很好的解决问题。注意r[]排序数组的作用,cmp用w[]作为依据,对r[]中的元素进行排序。#include<bits/stdc++.h>using namespace std;const int ...原创 2019-03-18 17:15:31 · 191 阅读 · 0 评论 -
scanf()gets() puts() gets()简单区别
出处http://blog.youkuaiyun.com/xingjiarong/article/details/47282817一、scanf()和gets()1.scanf()所在头文件:stdio.h语法:scanf(“格式控制字符串”,变量地址列表);接受字符串时:scanf(“%s”,字符数组名或指针);2.gets()所在头文件:stdio.h语法:gets(字符数组名或指针)...转载 2019-03-07 16:52:00 · 194 阅读 · 0 评论 -
哈利·波特的考试
此题用了floyd,思路非常简单,但是要注意两点:注意读题,每个条件都得注意到注意思路复杂不如思路简单,比如在取得每行最大值的时候,原来想先判断每一行是否有不可达的连通点,有则直接continue,再在连通点中判断最大值(错误原因暂时不想找了orz),正确方法是直接找出最大值,如果无穷大就直接不改变当前选取的动物就行了。#include <stdio.h>#include ...原创 2019-03-07 16:25:49 · 265 阅读 · 0 评论 -
筛法错误记录
筛法中for循环写成这个样子 for(int i=2;(i<=sqrt(M)) && (primes[i]==1);++i) { for(int j=2*i;j<=M;j=j+i) primes[j] = 0; }竟然没有想到for循环第二个条件一旦不符合就会跳出,所以&&后的条件应该放到循环内部去!有时候小bug真是让人很难想通...原创 2019-03-06 19:56:14 · 115 阅读 · 0 评论 -
C++ 10进制与N进制的转换
代码如下,函数意义不言自明: #include <bits/stdc++.h> using namespace std; int to10Base(int num,int base) { int res = 0,factor = 1; while(num) { res += (num...原创 2019-02-26 21:33:45 · 1540 阅读 · 0 评论 -
前序遍历+中序遍历 -> 建树和后序遍历方法
这里注意首先根据前序遍历找出根,然后分割二叉树进行建树。一定要在纸上画一画,用k做为子树的大小,preL,preR,inL,inR等作为树的边界,再加上preL>preR的跳出条件,就能完成了。#include <bits/stdc++.h>using namespace std;int pre[10] = {1,2,3,4,5,6};int in[10] = {3,2...原创 2019-03-02 19:37:23 · 866 阅读 · 0 评论 -
算法题解关于动态内存分配问题
排查bug排了半个小时,终于找到原因。下面的代码中node不是动态分配的,函数退出后就会被销毁,最终在main函数中输出的时候一直显示字符串乱码,百思不得其解,数字不知道为什么是对的。最后终于体会到动态内存分配的问题!void input(){ while(1) { int num,score; char name[20]; struct stud_node *next; ...原创 2019-03-05 20:15:14 · 288 阅读 · 0 评论 -
C++组合问题
/*5个中选3个数*/#include &lt;bits/stdc++.h&gt;using namespace std;int num[5] = {1,2,3,4,5};int processed[3];void combination(int start,int picked){ if(picked == 3) { for(int i=0;i&lt;3;++i) cout ...原创 2019-03-02 17:37:01 · 701 阅读 · 0 评论 -
最长回文
动态规划法(简单易懂)复杂度O(n^2)/*最长回文*/#include <bits/stdc++.h>using namespace std;const int maxn = 1000;char S[maxn];int dp[maxn][maxn];int main(){ cin >> S; //gets(S); int len = strlen...原创 2019-03-02 17:07:00 · 111 阅读 · 0 评论 -
【洛谷】P1015 大数加法和回文数的制作方法
临时写作,方法已经有了,之后有时间再修改。/*大数加法和回文数的制作方法<版本一>*//*P1015*/#include <bits/stdc++.h>using namespace std;int digits[100];void add(string num){ int len = num.length(); for(int i=len-1...原创 2019-02-24 22:02:21 · 329 阅读 · 0 评论 -
最长公共子序列和最长公共子串长度简单解法
这是最长公共子序列长度的dp解法,注意输入格式问题,可以根据具体情况修改。(gets接收空格,scanf放弃空格)#include <bits/stdc++.h>using namespace std;char A[100],B[100];int dp[100][100];int main(){ gets(A+1);gets(B+1); int len...原创 2019-02-28 10:34:27 · 209 阅读 · 0 评论 -
【洛谷】P1141 迷宫1
这题用了广搜,调试bug调了好久,因为这个解法也是参考网上的方法,到最后改到几乎一样还是不通过,最终发现用了vector后没有及时clear!这就很难找出来bug,每次都是前几个计算结果的重复,困惑解开的时候还是很后悔没有早注意这个地方的。话说调bug也是个需要灵光一现的事情 —By我#include<iostream>#include<queue>usin...原创 2019-01-22 20:46:42 · 157 阅读 · 0 评论 -
【洛谷】P1219 N皇后问题
代码如下,i+j和i-j+n很难想啊,但是全是套路!回溯是在拓展的哪个语句之后进行,因为深入进去后结果是在之后的函数调用里得到有时候直接输出就行,不必存储这种规律套路直接想不好得到,记住就行了代码如下:#include<iostream>using namespace std;/*i+j i-j是关键 By Felix Chang*/int n,cnt;int ...原创 2019-01-22 17:36:35 · 333 阅读 · 0 评论 -
C++大整数相乘
此题写了忘,忘了写,网上答案太花里胡哨,故写个简单答案在这里。#include <bits/stdc++.h>using namespace std;//大整数乘法 月经题 const int MAXSIZE = 1000;int main(){ int a[MAXSIZE]={0}; int b[MAXSIZE]={0}; int c[MAXSIZE*2+1] = ...原创 2019-05-18 11:29:19 · 671 阅读 · 0 评论